├── .gitignore ├── .vscode ├── c_cpp_properties.json ├── launch.json └── tasks.json ├── CHANGELOG.md ├── LICENSE ├── Makefile ├── README.md ├── TODO.md ├── config.mk.tmpl ├── dist.sh ├── dist ├── amiga │ ├── 8svx │ │ ├── BassGt.8svx │ │ ├── Bongo.8svx │ │ ├── Piano.8svx │ │ └── Vibra.8svx │ ├── Fonts │ │ ├── 2001 │ │ │ └── 8 │ │ ├── 2001.font │ │ ├── aqb.font │ │ ├── aqb │ │ │ ├── 6 │ │ │ └── 8 │ │ ├── cubberly.font │ │ ├── cubberly │ │ │ └── 32 │ │ ├── future.font │ │ ├── future │ │ │ ├── 11 │ │ │ ├── 15 │ │ │ ├── 22 │ │ │ └── 30 │ │ ├── manilow1.font │ │ └── manilow1 │ │ │ ├── 26 │ │ │ └── 40 │ ├── Icons │ │ ├── 3dplot.bas.info │ │ ├── BOBDemo1.bas.info │ │ ├── BOBDemo2.bas.info │ │ ├── BitmapDraw.bas.info │ │ ├── CHANGELOG.info │ │ ├── CtrlC.bas.info │ │ ├── CustomPointer.bas.info │ │ ├── Debug.bas.info │ │ ├── FontTutorial.bas.info │ │ ├── GadToolsTutorial1.bas.info │ │ ├── GadToolsTutorial2.bas.info │ │ ├── GadToolsTutorial3.bas.info │ │ ├── GadToolsTutorial4.bas.info │ │ ├── GadToolsTutorial5.bas.info │ │ ├── ILBMBitmap.bas.info │ │ ├── ILBMShow.bas.info │ │ ├── README.guide.info │ │ ├── SoundDemo1.bas.info │ │ ├── SoundDemo2.bas.info │ │ ├── SoundDemo3.bas.info │ │ ├── SpriteDemo1.bas.info │ │ ├── SpriteDemo2.bas.info │ │ ├── SpriteDemo3.bas.info │ │ ├── TagListTutorial.bas.info │ │ ├── aqb.info │ │ ├── aqb_topdir.info │ │ ├── bench.info │ │ ├── bezier.bas.info │ │ ├── ctHLBenchInt.bas.info │ │ ├── ctHLBenchReal.bas.info │ │ ├── demo.info │ │ ├── examples.info │ │ ├── fib.bas.info │ │ ├── foo.bas.info │ │ ├── fplot.bas.info │ │ ├── gfx1.bas.info │ │ ├── gfx2.bas.info │ │ ├── hand.bas.info │ │ ├── mandelbrot.bas.info │ │ ├── music.bas.info │ │ ├── sieve.bas.info │ │ ├── tetris.bas.info │ │ └── tutorial.info │ └── imgs │ │ ├── banana.iff │ │ ├── banana1.iff │ │ ├── clef.ilbm │ │ ├── dragon.iff │ │ ├── gorilla.iff │ │ ├── hope.iff │ │ └── notes.ilbm ├── aqb_music.png └── screenshot.png ├── examples ├── Makefile ├── bench │ ├── Makefile │ ├── ctHLBenchInt.bas │ ├── ctHLBenchReal.bas │ ├── fib.bas │ └── sieve.bas ├── demo │ ├── 3dplot.bas │ ├── Makefile │ ├── banana.bas │ ├── bezier.bas │ ├── fplot.bas │ ├── gfx1.bas │ ├── gfx2.bas │ ├── hand.bas │ ├── mandelbrot.bas │ ├── music.bas │ └── tetris.bas └── dev │ ├── Makefile │ ├── debug.sh │ ├── foo.bas │ └── link.sh ├── help ├── AnimSupport.md ├── IFFSupport.md ├── Makefile ├── OSUtility.md ├── RefAmiga.md └── RefCore.md ├── leak.sh ├── src ├── Makefile ├── amigasupport │ ├── Makefile │ ├── amigasupport.c │ └── amigasupport.h ├── compiler │ ├── .vscode │ │ ├── c_cpp_properties.json │ │ ├── launch.json │ │ ├── settings.json │ │ └── tasks.json │ ├── Makefile │ ├── aqb.c │ ├── assem.c │ ├── assem.h │ ├── codegen.c │ ├── codegen.h │ ├── compiler.c │ ├── compiler.h │ ├── cstub.c │ ├── cstub.h │ ├── debug.c │ ├── dis68k.c │ ├── env.c │ ├── env.h │ ├── errormsg.c │ ├── errormsg.h │ ├── frontend.c │ ├── frontend.h │ ├── hashmap.c │ ├── hashmap.h │ ├── icons.h │ ├── ide.c │ ├── ide.h │ ├── ide_con.c │ ├── link.c │ ├── link.h │ ├── linscan.c │ ├── linscan.h │ ├── logger.c │ ├── logger.h │ ├── options.c │ ├── options.h │ ├── scanner.c │ ├── scanner.h │ ├── symbol.c │ ├── symbol.h │ ├── table.c │ ├── table.h │ ├── temp.c │ ├── temp.h │ ├── tui.c │ ├── tui.h │ ├── types.c │ ├── types.h │ ├── ui.h │ ├── ui_amiga.c │ ├── ui_linux.c │ ├── util.c │ └── util.h ├── lib │ ├── AnimSupport │ │ ├── AnimSupport.bas │ │ ├── AnimSupport.c │ │ ├── AnimSupport.h │ │ └── Makefile │ ├── Collections │ │ ├── ArrayList.c │ │ ├── ArrayListEnumerator.c │ │ ├── Collections.bas │ │ ├── Collections.c │ │ ├── Collections.h │ │ ├── ExecList.c │ │ └── Makefile │ ├── GadToolsSupport │ │ ├── GadToolsSupport.bas │ │ ├── GadToolsSupport.c │ │ ├── GadToolsSupport.h │ │ ├── Makefile │ │ ├── genprops.py │ │ ├── gtbutton.c │ │ ├── gtcheckbox.c │ │ ├── gtcycle.c │ │ ├── gtinteger.c │ │ ├── gtlistview.c │ │ ├── gtmx.c │ │ ├── gtnumber.c │ │ ├── gtpalette.c │ │ ├── gtscroller.c │ │ ├── gtslider.c │ │ ├── gtstring.c │ │ └── gttext.c │ ├── IFFSupport │ │ ├── IFFSupport.bas │ │ ├── IFFSupport.c │ │ ├── IFFSupport.h │ │ └── Makefile │ ├── IntuiSupport │ │ ├── IntuiSupport.bas │ │ ├── IntuiSupport.c │ │ ├── IntuiSupport.h │ │ ├── Makefile │ │ ├── menu.c │ │ ├── menuitem.c │ │ ├── menuitemseparator.c │ │ └── menuitemtext.c │ ├── Makefile │ ├── OSDevices │ │ ├── Makefile │ │ └── OSDevices.bas │ ├── OSExec │ │ ├── Makefile │ │ └── OSExec.bas │ ├── OSGadTools │ │ ├── Makefile │ │ ├── OSGadTools.bas │ │ └── OSGadTools.c │ ├── OSGraphics │ │ ├── Makefile │ │ └── OSGraphics.bas │ ├── OSHardware │ │ ├── Makefile │ │ └── OSHardware.bas │ ├── OSIntuition │ │ ├── Makefile │ │ └── OSIntuition.bas │ ├── OSUtility │ │ ├── Makefile │ │ └── OSUtility.bas │ ├── _aqb │ │ ├── Makefile │ │ ├── _aqb.bas │ │ ├── _aqb.c │ │ ├── _aqb.h │ │ ├── asound.c │ │ ├── atags.c │ │ ├── atimer.c │ │ └── awindow.c │ ├── _brt │ │ ├── Makefile │ │ ├── _brt.bas │ │ ├── _brt.h │ │ ├── aio.c │ │ ├── amath.c │ │ ├── astr.c │ │ ├── autil.c │ │ ├── bcopy.c │ │ ├── carray.c │ │ ├── cstartup.c │ │ ├── data.c │ │ ├── dprintf.c │ │ ├── gc.c │ │ ├── memmove.c │ │ ├── oop.c │ │ └── startup.S │ └── minbrt │ │ ├── Makefile │ │ ├── as2mot.py │ │ ├── math.s │ │ ├── minbrt.c │ │ ├── prolog.asm │ │ └── prolog.s └── tools │ ├── Makefile │ ├── areaptrn │ ├── Makefile │ └── areaptrn.c │ ├── boopsitest │ ├── Makefile │ └── bitest.c │ ├── dumpfonts │ ├── Makefile │ └── dumpfonts.c │ ├── ffpmath │ ├── Makefile │ └── ffpmath.c │ ├── ffptest │ ├── Makefile │ └── ffptest.c │ ├── ffputils │ ├── Makefile │ ├── ffputils.c │ └── test_astr.c │ ├── gctest │ ├── Makefile │ ├── gctest.c │ ├── tgc.c │ └── tgc.h │ ├── gtltest │ ├── Makefile │ ├── gtltest.c │ └── include │ │ ├── inline │ │ └── gtlayout.h │ │ ├── libraries │ │ └── gtlayout.h │ │ └── proto │ │ └── gtlayout_protos.h │ ├── loadfont │ ├── Makefile │ └── loadfont.c │ ├── md2amiga │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── docs │ │ ├── Makefile │ │ ├── _templates │ │ │ └── sidebarintro.html │ │ ├── api.rst │ │ ├── conf.py │ │ ├── extend.rst │ │ ├── extensions.rst │ │ ├── index.rst │ │ ├── make.bat │ │ └── reqs.txt │ ├── marko │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── ast_renderer.py │ │ ├── block.py │ │ ├── cli.py │ │ ├── ext │ │ │ ├── __init__.py │ │ │ ├── __pycache__ │ │ │ │ ├── __init__.cpython-39.pyc │ │ │ │ ├── footnote.cpython-39.pyc │ │ │ │ └── toc.cpython-39.pyc │ │ │ ├── codehilite.py │ │ │ ├── footnote.py │ │ │ ├── gfm │ │ │ │ ├── __init__.py │ │ │ │ └── elements.py │ │ │ ├── pangu.py │ │ │ └── toc.py │ │ ├── helpers.py │ │ ├── html_renderer.py │ │ ├── inline.py │ │ ├── inline_parser.py │ │ ├── md_renderer.py │ │ ├── parser.py │ │ ├── patterns.py │ │ └── renderer.py │ ├── md2aguide.py │ ├── noxfile.py │ ├── pdm.lock │ ├── pyproject.toml │ ├── setup.cfg │ ├── setup.py │ └── tests │ │ ├── __init__.py │ │ ├── benchmark.py │ │ ├── normalize.py │ │ ├── samples │ │ ├── jquery.md │ │ └── syntax.md │ │ ├── spec.sh │ │ ├── spec │ │ ├── commonmark.txt │ │ └── gfm.txt │ │ ├── test_basic.py │ │ ├── test_ext.py │ │ ├── test_helpers.py │ │ └── test_spec.py │ ├── muitest │ ├── Makefile │ └── muitest.c │ ├── os2aqb │ ├── os2aqb.py │ └── sfd2aqb.py │ ├── printfloat │ ├── Makefile │ └── printfloat.c │ ├── reactiontest │ ├── Makefile │ ├── dprintf.c │ ├── ratest.c │ └── ratest.h │ ├── rtgblit │ ├── Makefile │ └── rtgblit.c │ ├── rttest │ ├── Makefile │ └── rttest.c │ └── runner │ ├── Makefile │ ├── logger.c │ ├── logger.h │ ├── main.c │ ├── run.c │ └── run.h ├── tests ├── Makefile ├── carray1.bas ├── carray10.bas ├── carray11.bas ├── carray2.bas ├── carray3.bas ├── carray4.bas ├── carray5.bas ├── carray6.bas ├── carray7.bas ├── carray8.bas ├── carray9.bas ├── coll1.bas ├── coll2.bas ├── coll3.bas ├── coll4.bas ├── coll5.bas ├── cond1.bas ├── cond2.bas ├── cond3.bas ├── cond4.bas ├── cond5.bas ├── cond6.bas ├── const1.bas ├── const2.bas ├── const3.bas ├── constprop.bas ├── ctrl1.bas ├── ctrl2.bas ├── ctrl3.bas ├── ctrl4.bas ├── ctrl5.bas ├── ctrl6.bas ├── ctrl7.bas ├── ctrl8.bas ├── ctrl9.bas ├── dynmem1.bas ├── exp1.bas ├── exp2.bas ├── exp3.bas ├── extcall2.bas ├── insights │ ├── debug │ │ ├── Makefile │ │ ├── debug.sh │ │ └── foo.bas │ ├── footprint │ │ ├── clean.sh │ │ ├── foo.bas │ │ └── footprint.sh │ └── link │ │ ├── clean.sh │ │ ├── foo.bas │ │ └── link.sh ├── io1.bas ├── io2.bas ├── io3.bas ├── io4.bas ├── io5.bas ├── io6.bas ├── io7.bas ├── loop1.bas ├── loop10.bas ├── loop11.bas ├── loop12.bas ├── loop13.bas ├── loop14.bas ├── loop15.bas ├── loop2.bas ├── loop3.bas ├── loop4.bas ├── loop5.bas ├── loop6.bas ├── loop7.bas ├── loop8.bas ├── loop9.bas ├── mod1 │ ├── Makefile │ ├── bar.bas │ ├── foo.bas │ └── mod1.bas ├── mod2 │ ├── Makefile │ ├── foo.bas │ ├── main.c │ ├── mod2.bas │ ├── mod2.c │ └── mod2.h ├── oop1.bas ├── oop10.bas ├── oop11.bas ├── oop12.bas ├── oop13.bas ├── oop14.bas ├── oop15.bas ├── oop16.bas ├── oop17.bas ├── oop2.bas ├── oop3.bas ├── oop4.bas ├── oop5.bas ├── oop6.bas ├── oop7.bas ├── oop8.bas ├── oop9.bas ├── opbool1.bas ├── opbool2.bas ├── opbyte.bas ├── opint.bas ├── oplong.bas ├── opsingle1.bas ├── opsingle2.bas ├── opubyte.bas ├── opuint.bas ├── opulong.bas ├── runtests ├── sarray1.bas ├── sarray2.bas ├── sarray3.bas ├── sarray4.bas ├── sarray5.bas ├── sarray6.bas ├── scopes1.bas ├── scopes2.bas ├── scopes3.bas ├── string1.bas ├── string2.bas ├── string3.bas ├── string4.bas ├── string5.bas ├── string6.bas ├── subtest1.bas ├── subtest10.bas ├── subtest11 │ ├── Makefile │ └── subtest11.bas ├── subtest12.bas ├── subtest13.bas ├── subtest14.bas ├── subtest15.bas ├── subtest16.bas ├── subtest17.bas ├── subtest18.bas ├── subtest19.bas ├── subtest2.bas ├── subtest20.bas ├── subtest21.bas ├── subtest22.bas ├── subtest23.bas ├── subtest24.bas ├── subtest25.bas ├── subtest26.bas ├── subtest27.bas ├── subtest3.bas ├── subtest4.bas ├── subtest5.bas ├── subtest6.bas ├── subtest7.bas ├── subtest8.bas ├── subtest9.bas ├── swap.bas ├── types1.bas ├── types2.bas ├── types3.bas ├── types4.bas ├── types5.bas ├── types6.bas ├── types7.bas ├── var1.bas └── var2.bas └── tutorial ├── BOBDemo1.bas ├── BOBDemo2.bas ├── BitmapDraw.bas ├── CtrlC.bas ├── CustomPointer.bas ├── Debug.bas ├── FontTutorial.bas ├── GadToolsTutorial1.bas ├── GadToolsTutorial2.bas ├── GadToolsTutorial3.bas ├── GadToolsTutorial4.bas ├── GadToolsTutorial5.bas ├── GadToolsTutorial6.bas ├── ILBMBitmap.bas ├── ILBMShow.bas ├── Makefile ├── MenuTutorial1.bas ├── SoundDemo1.bas ├── SoundDemo2.bas ├── SoundDemo3.bas ├── SpriteDemo1.bas ├── SpriteDemo2.bas ├── SpriteDemo3.bas └── TagListTutorial.bas /.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Linux", 5 | "includePath": [ 6 | "${workspaceFolder}/**" 7 | ], 8 | "defines": [], 9 | "compilerPath": "/usr/bin/gcc", 10 | "cStandard": "c11", 11 | "cppStandard": "c++17", 12 | "intelliSenseMode": "gcc-x64", 13 | "configurationProvider": "ms-vscode.makefile-tools" 14 | } 15 | ], 16 | "version": 4 17 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "build aqb compiler", 8 | "type": "shell", 9 | "command": "make", 10 | "args": [], 11 | "group": { 12 | "kind": "build", 13 | "isDefault": true 14 | } 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Guenter Bartsch 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | include config.mk 2 | 3 | MD2AGUIDE = src/tools/md2amiga/md2aguide.py 4 | 5 | .PHONY: clean all tests src examples help directories tutorial 6 | 7 | all: directories src tests help examples tutorial 8 | 9 | src: 10 | cd src ; make all 11 | 12 | tests: 13 | cd tests ; make all 14 | 15 | examples: 16 | cd examples ; make all 17 | 18 | help: README.md 19 | $(MD2AGUIDE) README.md > README.utf 20 | iconv -t "iso-8859-1" -f "UTF-8" README.utf -o README.guide 21 | rm README.utf 22 | cp README.guide $(DISTDIR) 23 | cd help ; make all 24 | 25 | tutorial: 26 | cd tutorial ; make all 27 | 28 | directories: 29 | mkdir -p target/m68k-amigaos/bin 30 | mkdir -p target/m68k-amigaos/obj 31 | mkdir -p target/x86_64-linux/bin 32 | mkdir -p target/x86_64-linux/obj 33 | mkdir -p $(DISTDIR)/lib 34 | mkdir -p $(DISTDIR)/libsrc 35 | 36 | clean: 37 | cd src ; make clean 38 | cd tests ; make clean 39 | cd examples ; make clean 40 | cd help ; make clean 41 | cd tutorial ; make clean 42 | rm -rf target 43 | rm -f README.guide 44 | -------------------------------------------------------------------------------- /dist/amiga/8svx/BassGt.8svx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/8svx/BassGt.8svx -------------------------------------------------------------------------------- /dist/amiga/8svx/Bongo.8svx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/8svx/Bongo.8svx -------------------------------------------------------------------------------- /dist/amiga/8svx/Piano.8svx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/8svx/Piano.8svx -------------------------------------------------------------------------------- /dist/amiga/8svx/Vibra.8svx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/8svx/Vibra.8svx -------------------------------------------------------------------------------- /dist/amiga/Fonts/2001.font: -------------------------------------------------------------------------------- 1 | 2001/8B -------------------------------------------------------------------------------- /dist/amiga/Fonts/2001/8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/2001/8 -------------------------------------------------------------------------------- /dist/amiga/Fonts/aqb.font: -------------------------------------------------------------------------------- 1 | aqb/6Baqb/8B -------------------------------------------------------------------------------- /dist/amiga/Fonts/aqb/6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/aqb/6 -------------------------------------------------------------------------------- /dist/amiga/Fonts/aqb/8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/aqb/8 -------------------------------------------------------------------------------- /dist/amiga/Fonts/cubberly.font: -------------------------------------------------------------------------------- 1 | Cubberly/322 b -------------------------------------------------------------------------------- /dist/amiga/Fonts/cubberly/32: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/cubberly/32 -------------------------------------------------------------------------------- /dist/amiga/Fonts/future.font: -------------------------------------------------------------------------------- 1 | future/30bfuture/22bfuture/15bfuture/11 b -------------------------------------------------------------------------------- /dist/amiga/Fonts/future/11: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/future/11 -------------------------------------------------------------------------------- /dist/amiga/Fonts/future/15: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/future/15 -------------------------------------------------------------------------------- /dist/amiga/Fonts/future/22: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/future/22 -------------------------------------------------------------------------------- /dist/amiga/Fonts/future/30: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/future/30 -------------------------------------------------------------------------------- /dist/amiga/Fonts/manilow1.font: -------------------------------------------------------------------------------- 1 | manilow1/40(bmanilow1/26b -------------------------------------------------------------------------------- /dist/amiga/Fonts/manilow1/26: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/manilow1/26 -------------------------------------------------------------------------------- /dist/amiga/Fonts/manilow1/40: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Fonts/manilow1/40 -------------------------------------------------------------------------------- /dist/amiga/Icons/3dplot.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/3dplot.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/BOBDemo1.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/BOBDemo1.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/BOBDemo2.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/BOBDemo2.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/BitmapDraw.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/BitmapDraw.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/CHANGELOG.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/CHANGELOG.info -------------------------------------------------------------------------------- /dist/amiga/Icons/CtrlC.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/CtrlC.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/CustomPointer.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/CustomPointer.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/Debug.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/Debug.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/FontTutorial.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/FontTutorial.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/GadToolsTutorial1.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/GadToolsTutorial1.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/GadToolsTutorial2.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/GadToolsTutorial2.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/GadToolsTutorial3.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/GadToolsTutorial3.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/GadToolsTutorial4.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/GadToolsTutorial4.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/GadToolsTutorial5.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/GadToolsTutorial5.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/ILBMBitmap.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/ILBMBitmap.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/ILBMShow.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/ILBMShow.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/README.guide.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/README.guide.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SoundDemo1.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SoundDemo1.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SoundDemo2.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SoundDemo2.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SoundDemo3.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SoundDemo3.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SpriteDemo1.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SpriteDemo1.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SpriteDemo2.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SpriteDemo2.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/SpriteDemo3.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/SpriteDemo3.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/TagListTutorial.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/TagListTutorial.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/aqb.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/aqb.info -------------------------------------------------------------------------------- /dist/amiga/Icons/aqb_topdir.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/aqb_topdir.info -------------------------------------------------------------------------------- /dist/amiga/Icons/bench.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/bench.info -------------------------------------------------------------------------------- /dist/amiga/Icons/bezier.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/bezier.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/ctHLBenchInt.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/ctHLBenchInt.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/ctHLBenchReal.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/ctHLBenchReal.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/demo.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/demo.info -------------------------------------------------------------------------------- /dist/amiga/Icons/examples.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/examples.info -------------------------------------------------------------------------------- /dist/amiga/Icons/fib.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/fib.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/foo.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/foo.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/fplot.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/fplot.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/gfx1.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/gfx1.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/gfx2.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/gfx2.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/hand.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/hand.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/mandelbrot.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/mandelbrot.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/music.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/music.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/sieve.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/sieve.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/tetris.bas.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/tetris.bas.info -------------------------------------------------------------------------------- /dist/amiga/Icons/tutorial.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/Icons/tutorial.info -------------------------------------------------------------------------------- /dist/amiga/imgs/banana.iff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/banana.iff -------------------------------------------------------------------------------- /dist/amiga/imgs/banana1.iff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/banana1.iff -------------------------------------------------------------------------------- /dist/amiga/imgs/clef.ilbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/clef.ilbm -------------------------------------------------------------------------------- /dist/amiga/imgs/dragon.iff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/dragon.iff -------------------------------------------------------------------------------- /dist/amiga/imgs/gorilla.iff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/gorilla.iff -------------------------------------------------------------------------------- /dist/amiga/imgs/hope.iff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/hope.iff -------------------------------------------------------------------------------- /dist/amiga/imgs/notes.ilbm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/amiga/imgs/notes.ilbm -------------------------------------------------------------------------------- /dist/aqb_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/aqb_music.png -------------------------------------------------------------------------------- /dist/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/dist/screenshot.png -------------------------------------------------------------------------------- /examples/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: clean all demo bench dev 2 | 3 | all: demo bench dev 4 | 5 | demo: 6 | cd demo ; make all 7 | 8 | bench: 9 | cd bench ; make all 10 | 11 | dev: 12 | cd dev ; make all 13 | 14 | clean: 15 | cd demo ; make clean 16 | cd bench ; make clean 17 | cd dev ; make clean 18 | -------------------------------------------------------------------------------- /examples/bench/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | AQBFLAGS = -L ../../src/lib 4 | 5 | SRCS = ctHLBenchInt.bas ctHLBenchReal.bas fib.bas sieve.bas 6 | 7 | ASMDIR_AMIGAOS_DEMO = aqb_demo/asm 8 | OBJDIR_AMIGAOS_DEMO = aqb_demo/obj 9 | BINDIR_AMIGAOS_DEMO = aqb_demo 10 | 11 | ASMS = $(patsubst %,${EMUDIR}/${ASMDIR_AMIGAOS_DEMO}/%.s,$(basename $(SRCS))) 12 | OBJS = $(patsubst %,${EMUDIR}/${OBJDIR_AMIGAOS_DEMO}/%.o,$(basename $(SRCS))) 13 | BINS = $(patsubst %,${EMUDIR}/${BINDIR_AMIGAOS_DEMO}/%,$(basename $(SRCS))) 14 | 15 | .PHONY: clean all dirs 16 | 17 | all: dirs $(BINS) 18 | 19 | $(ASMS) : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s : %.bas 20 | $(AQB) $(AQBFLAGS) -a $@ $< 21 | 22 | $(OBJS) : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s 23 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 24 | 25 | $(BINS) : $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO)/% : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o 26 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $< ../../src/lib/_brt/_brt.a ../../src/lib/_aqb/_aqb.a -o $@ 27 | $(STRIP_AMIGAOS) $@ 28 | 29 | clean: 30 | rm -rf $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 31 | rm -rf $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 32 | rm -rf $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 33 | 34 | dirs: 35 | mkdir -p $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 36 | mkdir -p $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 37 | mkdir -p $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 38 | 39 | 40 | -------------------------------------------------------------------------------- /examples/bench/ctHLBenchInt.bas: -------------------------------------------------------------------------------- 1 | 2 | REM c't HL Benchmarks 3 | 4 | SUB IntMath STATIC 5 | 6 | startTime = TIMER() 7 | 8 | PRINT "Start" 9 | x& = 0 10 | y& = 3 11 | FOR i% = 1 TO 10000 12 | x& = x& + ( y&*y&-y& ) / y& 13 | NEXT i% 14 | PRINT "Finish :", x& 15 | 16 | stopTime = TIMER() 17 | 18 | PRINT "Took:"; stopTime-startTime; "s" 19 | 20 | END SUB 21 | 22 | CALL IntMath 23 | 24 | PRINT 25 | PRINT "PRESS ENTER TO QUIT" 26 | 27 | WHILE INKEY$ = "" 28 | SLEEP 29 | WEND 30 | 31 | -------------------------------------------------------------------------------- /examples/bench/ctHLBenchReal.bas: -------------------------------------------------------------------------------- 1 | REM c't HL Benchmarks 2 | 3 | SUB RealMath STATIC 4 | 5 | startTime = TIMER() 6 | 7 | PRINT "Start" 8 | x = 0.0 9 | y = 9.9 10 | FOR i% = 1 TO 10000 11 | x = x + ( y * y - y ) / y 12 | NEXT i% 13 | PRINT "Finish :"; x 14 | 15 | stopTime = TIMER() 16 | 17 | PRINT "Took:";stopTime-startTime;"s" 18 | END SUB 19 | 20 | CALL RealMath 21 | 22 | PRINT 23 | PRINT "PRESS ENTER TO QUIT" 24 | 25 | WHILE INKEY$ = "" 26 | SLEEP 27 | WEND 28 | 29 | -------------------------------------------------------------------------------- /examples/bench/fib.bas: -------------------------------------------------------------------------------- 1 | 2 | FUNCTION fibonacci% ( BYVAL a% ) 3 | 4 | IF a%=1 OR a%=2 THEN 5 | fibonacci% = 1 6 | ELSE 7 | fibonacci% = fibonacci%(a%-1) + fibonacci%(a%-2) 8 | END IF 9 | 10 | END FUNCTION 11 | 12 | PRINT "Start..." 13 | 14 | startTime = TIMER() 15 | 16 | PRINT fibonacci%(23) 17 | 18 | endTime = TIMER() 19 | 20 | PRINT "Took:"; endTime-startTime; "s" 21 | 22 | PRINT 23 | PRINT "PRESS ENTER TO QUIT" 24 | 25 | WHILE INKEY$ = "" 26 | SLEEP 27 | WEND 28 | 29 | 30 | -------------------------------------------------------------------------------- /examples/bench/sieve.bas: -------------------------------------------------------------------------------- 1 | REM Eratosthenes Sieve Prime Number Program in BASIC 2 | REM based on: https://en.wikipedia.org/wiki/Byte_Sieve#Implementation / ACE 3 | 4 | IF FRE(-2) < 20000 THEN 5 | PRINT "*** Error: stack size too small (need at least 20KBytes)" 6 | ERROR 42 7 | END IF 8 | 9 | 1 DEFINT a-z 10 | 5 SIZE = 8190 11 | 10 PRINT "BYTE SIEVE, 7000 numbers done 5 times" 12 | 15 t!=TIMER() 13 | 30 DIM FLAGS(STATIC 8191) 14 | 35 FOR j=1 TO 5 15 | 36 PRINT "iter #";j;", time:"; timer() 16 | 40 ACOUNT=0 17 | 50 FOR I=0 TO SIZE 18 | 60 FLAGS(I)=1 19 | 70 NEXT I 20 | 80 FOR I=0 TO SIZE 21 | 90 IF FLAGS(I)=0 THEN GOTO 170 22 | 100 PRIME=I+I+3 23 | 110 K=I+PRIME 24 | 120 IF K>SIZE THEN GOTO 160 25 | 130 FLAGS(K)=0 26 | 140 K=K+PRIME 27 | 150 GOTO 120 28 | 160 ACOUNT=ACOUNT+1 29 | 170 NEXT I 30 | 175 NEXT J 31 | 176 t!=TIMER()-t! 32 | 180 PRINT ACOUNT;" primes found" 33 | 190 PRINT "avg";t!/5;"s for each of the 5 iterations." 34 | 195 PRINT : PRINT "PRESS ENTER TO QUIT" 35 | 200 WHILE INKEY$="" 36 | 210 SLEEP 37 | 220 WEND 38 | -------------------------------------------------------------------------------- /examples/demo/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | AQBFLAGS = -L ../../src/lib 4 | 5 | SRCS = gfx1.bas gfx2.bas 3dplot.bas hand.bas tetris.bas mandelbrot.bas banana.bas music.bas bezier.bas 6 | 7 | ASMDIR_AMIGAOS_DEMO = aqb_demo/asm 8 | OBJDIR_AMIGAOS_DEMO = aqb_demo/obj 9 | BINDIR_AMIGAOS_DEMO = aqb_demo 10 | 11 | ASMS = $(patsubst %,${EMUDIR}/${ASMDIR_AMIGAOS_DEMO}/%.s,$(basename $(SRCS))) 12 | OBJS = $(patsubst %,${EMUDIR}/${OBJDIR_AMIGAOS_DEMO}/%.o,$(basename $(SRCS))) 13 | BINS = $(patsubst %,${EMUDIR}/${BINDIR_AMIGAOS_DEMO}/%,$(basename $(SRCS))) 14 | 15 | .PHONY: clean all dirs 16 | 17 | all: dirs $(BINS) 18 | 19 | $(ASMS) : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s : %.bas 20 | $(AQB) $(AQBFLAGS) -a $@ $< 21 | 22 | $(OBJS) : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s 23 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 24 | 25 | $(BINS) : $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO)/% : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o 26 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $< ../../src/lib/IFFSupport/IFFSupport.a ../../src/lib/_aqb/_aqb.a ../../src/lib/_brt/_brt.a -o $@ 27 | $(STRIP_AMIGAOS) $@ 28 | 29 | clean: 30 | rm -rf $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 31 | rm -rf $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 32 | rm -rf $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 33 | 34 | dirs: 35 | mkdir -p $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 36 | mkdir -p $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 37 | mkdir -p $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 38 | 39 | -------------------------------------------------------------------------------- /examples/demo/fplot.bas: -------------------------------------------------------------------------------- 1 | ' function parser in AQB 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM SHARED AS string fs = "x*x" 6 | DIM SHARED AS boolean eol = false 7 | DIM SHARED AS integer scPos = 0 8 | DIM SHARED AS UBYTE scCurC 9 | DIM SHARED AS integer scLen 10 | DIM SHARED AS integer scSym 11 | 12 | CONST AS integer SYM_ASTERISK = 1 13 | CONST AS integer SYM_IDENTIFIER = 2 14 | 15 | 16 | SUB getch 17 | 18 | eol = scPos >= scLen 19 | 20 | IF eol THEN RETURN 21 | 22 | scCurC = fs [ scPos ] 23 | scPos = scPos + 1 24 | 25 | 26 | END SUB 27 | 28 | FUNCTION IsWhitespace ( c AS UBYTE ) 29 | 30 | IF c = 32 OR c = 7 THEN 31 | RETURN TRUE 32 | END IF 33 | RETURN false 34 | END FUNCTION 35 | 36 | SUB getsym 37 | 38 | WHILE NOT eol AND IsWhitespace ( scCurC ) 39 | getch 40 | WEND 41 | 42 | SELECT CASE scCurC 43 | CASE 42 : REM * 44 | scSym = SYM_ASTERISK 45 | CASE ELSE 46 | IF IsVarChar ( scCurC ) THEN 47 | scIdentifier 48 | ELSE 49 | ERROR 1 50 | END IF 51 | 52 | END SELECT 53 | 54 | END SUB 55 | 56 | SUB scInit 57 | 58 | scPos = 0 59 | eol = false 60 | 61 | scLen = LEN ( fs ) 62 | getch 63 | getsym 64 | 65 | END SUB 66 | 67 | scInit 68 | 69 | -------------------------------------------------------------------------------- /examples/dev/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | AQBFLAGS = -L ../../src/lib 4 | 5 | SRCS = foo.bas 6 | 7 | ASMDIR_AMIGAOS_DEMO = aqb_demo/asm 8 | OBJDIR_AMIGAOS_DEMO = aqb_demo/obj 9 | BINDIR_AMIGAOS_DEMO = aqb_demo 10 | 11 | ASMS = $(patsubst %,${EMUDIR}/${ASMDIR_AMIGAOS_DEMO}/%.s,$(basename $(SRCS))) 12 | OBJS = $(patsubst %,${EMUDIR}/${OBJDIR_AMIGAOS_DEMO}/%.o,$(basename $(SRCS))) 13 | BINS = $(patsubst %,${EMUDIR}/${BINDIR_AMIGAOS_DEMO}/%,$(basename $(SRCS))) 14 | 15 | .PHONY: clean all dirs 16 | 17 | all: dirs $(BINS) 18 | 19 | $(ASMS) : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s : %.bas 20 | $(AQB) $(AQBFLAGS) -a $@ $< 21 | 22 | $(OBJS) : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o : $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO)/%.s 23 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 24 | 25 | $(BINS) : $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO)/% : $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO)/%.o 26 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $< ../../src/lib/_brt/_brt.a ../../src/lib/_aqb/_aqb.a -o $@ 27 | $(STRIP_AMIGAOS) $@ 28 | 29 | clean: 30 | rm -rf $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 31 | rm -rf $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 32 | rm -rf $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 33 | 34 | dirs: 35 | mkdir -p $(EMUDIR)/$(ASMDIR_AMIGAOS_DEMO) 36 | mkdir -p $(EMUDIR)/$(OBJDIR_AMIGAOS_DEMO) 37 | mkdir -p $(EMUDIR)/$(BINDIR_AMIGAOS_DEMO) 38 | 39 | -------------------------------------------------------------------------------- /examples/dev/debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | EXAMPLE=gfx1 4 | 5 | ASMProsrc='/home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/foo.asm' 6 | 7 | ../../target/x86_64-linux/bin/aqb -v -O -L ../../src/lib -A ${ASMProsrc}.tmp -o foo.s ${EXAMPLE}.bas 8 | # ../../target/x86_64-linux/bin/aqb -v -L ../../src/lib -A ${ASMProsrc}.tmp -o foo.s ${EXAMPLE}.bas 9 | 10 | cat ../../src/lib/minbrt/prolog.asm ${ASMProsrc}.tmp ../../src/lib/minbrt/minbrt.asm ../../src/lib/minbrt/math.s >${ASMProsrc} 11 | 12 | rm -f ${ASMProsrc}.tmp 13 | 14 | echo "${ASMProsrc} written." 15 | 16 | -------------------------------------------------------------------------------- /examples/dev/foo.bas: -------------------------------------------------------------------------------- 1 | ' just for actual tests 2 | 3 | print "Hello AQB" 4 | 5 | WHILE inkey$ = "" 6 | SLEEP 7 | WEND 8 | -------------------------------------------------------------------------------- /examples/dev/link.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | EXAMPLE=tetris 4 | 5 | IRA='/home/guenter/projects/amiga/ira/src/ira/ira' 6 | AQB="../../target/x86_64-linux/bin/aqb" 7 | AS_AMIGAOS='/home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-as' 8 | LD_AMIGAOS='/home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-ld' 9 | STRIP_AMIGAOS='/home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-strip' 10 | OBJDUMP_AMIGAOS='/home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-objdump' 11 | 12 | # 13 | # cleanup 14 | # 15 | 16 | rm -f ${EXAMPLE}.s ${EXAMPLE} ${EXAMPLE}.dump ${EXAMPLE}.asm ${EXAMPLE}_gnu.o ${EXAMPLE}_gnu.bin ${EXAMPLE}_gnu.dump ${EXAMPLE}.log 17 | 18 | # 19 | # AQB 20 | # 21 | 22 | ${AQB} -v -L ../../src/lib -a ${EXAMPLE}.s -o ${EXAMPLE} ${EXAMPLE}.bas || exit 23 | cp ${EXAMPLE} /home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/ 24 | 25 | # 26 | # analyze load file produced by aqb's internal assembler/linker 27 | # 28 | 29 | ${OBJDUMP_AMIGAOS} -x -d -r ${EXAMPLE} &>${EXAMPLE}.dump 30 | echo ${IRA} -a ${EXAMPLE} 31 | ${IRA} -a ${EXAMPLE} 32 | 33 | # create a load file using GNU as / ld for comparison 34 | 35 | ${AS_AMIGAOS} -march=68000 -mcpu=68000 ${EXAMPLE}.s -o ${EXAMPLE}_gnu.o 36 | ${LD_AMIGAOS} ../../src/lib/_brt/startup.o ${EXAMPLE}_gnu.o ../../src/lib/_brt.a ../../src/lib/_aqb.a -o ${EXAMPLE}_gnu.bin 37 | cp ${EXAMPLE}_gnu.bin /home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/ 38 | 39 | ${OBJDUMP_AMIGAOS} -x -d -r ${EXAMPLE}_gnu.bin &>${EXAMPLE}_gnu.dump 40 | #${IRA} -a ${EXAMPLE}_gnu.bin 41 | 42 | # 43 | # run binary in vamos 44 | # 45 | 46 | # echo 47 | # echo "vamos ${EXAMPLE}" 48 | # vamos ${EXAMPLE} 49 | 50 | -------------------------------------------------------------------------------- /help/Makefile: -------------------------------------------------------------------------------- 1 | include ../config.mk 2 | 3 | MD2AGUIDE = ../src/tools/md2amiga/md2aguide.py 4 | 5 | .PHONY: clean all 6 | 7 | all: RefAmiga.guide RefCore.guide IFFSupport.guide AnimSupport.guide OSUtility.guide 8 | mkdir -p $(DISTDIR)/help 9 | cp *.guide $(DISTDIR)/help/ 10 | 11 | %.guide : %.md 12 | $(MD2AGUIDE) $< > $@ 13 | 14 | clean: 15 | rm -f *.guide 16 | 17 | -------------------------------------------------------------------------------- /leak.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt \ 4 | target/x86_64-linux/bin/aqb foo.bas 5 | 6 | -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: clean all compiler lib amigasupport 2 | 3 | all: amigasupport compiler lib 4 | 5 | amigasupport: 6 | cd amigasupport ; make all 7 | 8 | compiler: 9 | cd compiler ; make all 10 | 11 | lib: 12 | cd lib ; make all 13 | 14 | clean: 15 | cd amigasupport ; make clean 16 | cd compiler ; make clean 17 | cd lib ; make clean 18 | -------------------------------------------------------------------------------- /src/amigasupport/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: amigasupport.a 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $< -o $@ 9 | 10 | %.o : %.s 11 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 12 | 13 | amigasupport.a: amigasupport.o 14 | $(AR_AMIGAOS) -crs amigasupport.a $^ 15 | 16 | clean: 17 | rm -f *.o amigasupport.a 18 | 19 | -------------------------------------------------------------------------------- /src/compiler/.vscode/c_cpp_properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Linux", 5 | "includePath": [ 6 | "${workspaceFolder}/**" 7 | ], 8 | "defines": [], 9 | "compilerPath": "/usr/bin/gcc", 10 | "cStandard": "c11", 11 | "cppStandard": "c++17", 12 | "intelliSenseMode": "gcc-x64" 13 | } 14 | ], 15 | "version": 4 16 | } -------------------------------------------------------------------------------- /src/compiler/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.tcc": "c" 4 | } 5 | } -------------------------------------------------------------------------------- /src/compiler/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "build aqb compiler", 8 | "type": "shell", 9 | "command": "make", 10 | "args": [], 11 | "group": { 12 | "kind": "build", 13 | "isDefault": true 14 | } 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /src/compiler/compiler.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_COMPILER_H 2 | #define HAVE_COMPILER_H 3 | 4 | #include "util.h" 5 | 6 | int CO_compile(string sourcefn, string module_name, string symfn, string cstubfn, string objfn, string binfn, 7 | string asm_gas_fn, string asm_asmpro_fn, string asm_vasm_fn, bool hasCode); 8 | 9 | void CO_exit(int return_code); 10 | 11 | #endif 12 | -------------------------------------------------------------------------------- /src/compiler/cstub.h: -------------------------------------------------------------------------------- 1 | #ifndef CSTUB_H 2 | #define CSTUB_H 3 | 4 | #include "env.h" 5 | 6 | bool CS_writeCStubFile(string cstubfn, E_module mod); 7 | 8 | #endif // CSTUB_H 9 | 10 | -------------------------------------------------------------------------------- /src/compiler/errormsg.h: -------------------------------------------------------------------------------- 1 | #ifndef ERROR_MSG_H 2 | #define ERROR_MSG_H 3 | 4 | #include "util.h" 5 | #include "scanner.h" 6 | 7 | extern bool EM_anyErrors; 8 | extern char EM_firstError[]; 9 | extern uint16_t EM_firstErrorLine; 10 | extern uint16_t EM_firstErrorCol; 11 | 12 | void EM_init(void); 13 | 14 | bool EM_error(S_pos pos, string, ...); // always returns false 15 | 16 | string EM_format(S_pos pos, string, ...); 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /src/compiler/frontend.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_FRONTEND_H 2 | #define HAVE_FRONTEND_H 3 | 4 | #include 5 | #include "util.h" 6 | #include "env.h" 7 | #include "codegen.h" 8 | 9 | extern const char *FE_filename; 10 | extern E_module FE_mod; 11 | 12 | CG_fragList FE_sourceProgram(FILE *inf, const char *filename, bool is_main, string module_name); 13 | 14 | bool FE_writeSymFile (string symfn, bool hasCode); 15 | bool FE_writeCStubFile (string cstubfn); 16 | 17 | void FE_init(void); 18 | 19 | void FE_boot(void); 20 | extern S_symbol FE_keywords[]; 21 | extern int FE_num_keywords; 22 | bool FE_isKeyword (S_symbol sym); 23 | 24 | #endif 25 | 26 | -------------------------------------------------------------------------------- /src/compiler/hashmap.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generic hashmap manipulation functions 3 | * 4 | * Originally by Elliot C Back - http://elliottback.com/wp/hashmap-implementation-in-c/ 5 | * 6 | * Modified by Pete Warden to fix a serious performance problem, support strings as keys 7 | * and removed thread synchronization - http://petewarden.typepad.com 8 | */ 9 | #ifndef __HASHMAP_H__ 10 | #define __HASHMAP_H__ 11 | 12 | #include "util.h" 13 | 14 | #define MAP_MISSING -3 /* No such element */ 15 | #define MAP_FULL -2 /* Hashmap is full */ 16 | #define MAP_OMEM -1 /* Out of Memory */ 17 | #define MAP_OK 0 /* OK */ 18 | 19 | /* 20 | * any_t is a pointer. This allows you to put arbitrary structures in 21 | * the hashmap. 22 | */ 23 | typedef void *any_t; 24 | 25 | /* 26 | * map_t is a pointer to an internally maintained data structure. 27 | * Clients of this package do not need to know how hashmaps are 28 | * represented. They see and manipulate only map_t's. 29 | */ 30 | typedef any_t map_t; 31 | 32 | /* create an empty hashmap */ 33 | map_t hashmap_new(U_poolId pid); 34 | 35 | /* add an element to the hashmap. Return MAP_OK or MAP_OMEM. */ 36 | int hashmap_put(map_t in, char* key, any_t value, bool copy_key); 37 | 38 | /* get an element from the hashmap. Return MAP_OK or MAP_MISSING. */ 39 | int hashmap_get(map_t in, char* key, any_t *value); 40 | 41 | /* remove an element from the hashmap. Return MAP_OK or MAP_MISSING. */ 42 | int hashmap_remove(map_t in, char* key); 43 | 44 | /* get the current size of a hashmap */ 45 | extern int hashmap_length(map_t in); 46 | 47 | #endif 48 | 49 | -------------------------------------------------------------------------------- /src/compiler/link.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_LINK_H 2 | #define HAVE_LINK_H 3 | 4 | #include "assem.h" 5 | 6 | typedef struct LI_segmentList_ *LI_segmentList; 7 | typedef struct LI_segmentListNode_ *LI_segmentListNode; 8 | 9 | struct LI_segmentListNode_ 10 | { 11 | AS_segment seg; 12 | LI_segmentListNode next; 13 | }; 14 | 15 | struct LI_segmentList_ 16 | { 17 | LI_segmentListNode first, last; 18 | TAB_table commonSyms; // symbols for the .common segment, S_symbol -> symInfo 19 | }; 20 | 21 | LI_segmentList LI_SegmentList(void); 22 | 23 | void LI_segmentWriteObjectFile (AS_object obj, string objfn); 24 | 25 | void LI_segmentListAppend (LI_segmentList sl, AS_segment seg); 26 | bool LI_segmentListReadObjectFile (U_poolId pid, LI_segmentList sl, string sourcefn, FILE *f); 27 | bool LI_link (U_poolId pid, LI_segmentList sl); 28 | void LI_segmentListWriteLoadFile (LI_segmentList sl, string loadfn); 29 | 30 | bool LI_segmentListReadLoadFile (U_poolId pid, LI_segmentList sl, string sourcefn, FILE *f); 31 | void LI_relocate (LI_segmentList sl, TAB_table symbols); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /src/compiler/linscan.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_LINSCAN_H 2 | #define HAVE_LINSCAN_H 3 | 4 | #include "util.h" 5 | #include "codegen.h" 6 | 7 | bool LS_regalloc(CG_frame f, AS_instrList il); 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /src/compiler/logger.c: -------------------------------------------------------------------------------- 1 | #include "logger.h" 2 | #include 3 | 4 | LOG_cb_t LOG_cb = NULL; 5 | 6 | void LOG_init (LOG_cb_t cb) 7 | { 8 | LOG_cb = cb; 9 | } 10 | -------------------------------------------------------------------------------- /src/compiler/logger.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_LOGGER_H 2 | #define HAVE_LOGGER_H 3 | 4 | #include 5 | 6 | #define LOG_DEBUG 0 7 | #define LOG_INFO 1 8 | #define LOG_ERROR 2 9 | 10 | //#define LOG_LEVEL LOG_DEBUG 11 | #define LOG_LEVEL LOG_INFO 12 | 13 | #define LOG_FILENAME "aqb.log" 14 | 15 | typedef void (*LOG_cb_t)(uint8_t lvl, char *fmt, ...); 16 | extern LOG_cb_t LOG_cb; 17 | 18 | #define LOG_printf(lvl, ...) do { if ((lvl >= LOG_LEVEL) && LOG_cb) LOG_cb(lvl, __VA_ARGS__); } while (0) 19 | 20 | void LOG_init (LOG_cb_t cb); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /src/compiler/symbol.h: -------------------------------------------------------------------------------- 1 | #ifndef SYMBOL_H 2 | #define SYMBOL_H 3 | 4 | #include "table.h" 5 | 6 | /* 7 | * symbol.h - Symbols and symbol-tables 8 | * 9 | */ 10 | 11 | void SYM_init(void); 12 | 13 | typedef struct S_symbol_ *S_symbol; 14 | 15 | /* make a unique symbol from a given string. 16 | * Different calls to S_Symbol("foo") will yield the same S_symbol 17 | * value, even if the "foo" strings are at different locations. */ 18 | S_symbol S_Symbol(string s); 19 | 20 | /* extract the underlying string from a symbol */ 21 | string S_name(S_symbol); 22 | 23 | /* 24 | * scopes 25 | */ 26 | 27 | /* scopes are nested, map symbol -> anyptr */ 28 | typedef struct S_scope_ *S_scope; 29 | 30 | /* Start a new scope */ 31 | S_scope S_beginScope(void); 32 | 33 | /* free scope s */ 34 | void S_endScope(S_scope s); 35 | 36 | /* enter a binding "sym->value" into "scope" */ 37 | void S_enter(S_scope scope, S_symbol sym, void *value); 38 | 39 | /* look up the most recent binding of "sym" in "scope", or return NULL if sym is unbound. */ 40 | void *S_look(S_scope scope, S_symbol sym); 41 | 42 | // iterate through all entries in scope 43 | TAB_iter S_Iter(S_scope scope); 44 | 45 | /* 46 | * list of symbols 47 | */ 48 | 49 | typedef struct S_symlist_ *S_symlist; 50 | 51 | struct S_symlist_ 52 | { 53 | S_symbol sym; 54 | S_symlist next; 55 | }; 56 | 57 | S_symlist S_Symlist(S_symbol sym, S_symlist next); 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /src/compiler/table.h: -------------------------------------------------------------------------------- 1 | #ifndef TABLE_H 2 | #define TABLE_H 3 | 4 | #include "util.h" 5 | 6 | /* 7 | * table.h - generic hash table 8 | * 9 | * No algorithm should use these functions directly, because 10 | * programming with void* is too error-prone. Instead, 11 | * each module should make "wrapper" functions that take 12 | * well-typed arguments and call the TAB_ functions. 13 | */ 14 | 15 | typedef struct TAB_table_ *TAB_table; 16 | typedef struct TAB_iter_ *TAB_iter; 17 | 18 | /* Make a new table mapping "keys" to "values". */ 19 | TAB_table TAB_empty(U_poolId pid); 20 | 21 | /* Enter the mapping "key"->"value" into table "t", 22 | * shadowing but not destroying any previous binding for "key". */ 23 | void TAB_enter(TAB_table t, void *key, void *value); 24 | 25 | /* Look up the most recent binding for "key" in table "t" */ 26 | void *TAB_look(TAB_table t, void *key); 27 | 28 | /* 29 | * table iterators 30 | */ 31 | 32 | // create a new table iterator 33 | TAB_iter TAB_Iter(TAB_table table); 34 | 35 | // get next table element from iterator - returns FALSE when exhausted, TRUE otherwise 36 | bool TAB_next(TAB_iter iter, void **key, void **value); 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /src/lib/AnimSupport/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: AnimSupport.a AnimSupport.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 9 | 10 | AnimSupport.sym : AnimSupport.bas 11 | $(AQB) -L .. -d _aqb -s AnimSupport.sym $< 12 | pushd .. && rm -f AnimSupport.sym AnimSupport.a && ln -s AnimSupport/AnimSupport.sym && ln -s AnimSupport/AnimSupport.a && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | AnimSupport.a: AnimSupport.o 18 | $(AR_AMIGAOS) -crs AnimSupport.a $^ 19 | pushd .. && rm -f AnimSupport.a && ln -s AnimSupport/AnimSupport.a && popd 20 | cp $@ $(DISTDIR)/lib 21 | 22 | %.asm: %.c 23 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 24 | 25 | clean: 26 | rm -f *.o AnimSupport.a *.sym *.asm aqb.log 27 | 28 | -------------------------------------------------------------------------------- /src/lib/Collections/Collections.c: -------------------------------------------------------------------------------- 1 | #include "Collections.h" 2 | 3 | void _Collections_shutdown(void) 4 | { 5 | } 6 | 7 | void _Collections_init(void) 8 | { 9 | // module initialization - called from __aqb_main 10 | 11 | ON_EXIT_CALL(_Collections_shutdown); 12 | 13 | } 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/lib/Collections/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all diss 4 | 5 | all: stub.c Collections.a Collections.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $< -o $@ 9 | 10 | Collections.sym : Collections.bas 11 | $(AQB) -L .. -d _brt -s $@ $< 12 | pushd .. && rm -f Collections.sym && ln -s Collections/Collections.sym && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | stub.c: Collections.bas 18 | $(AQB) -L .. -d _brt -S $@ $< 19 | 20 | %.o : %.s 21 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 22 | 23 | Collections.a: Collections.o ArrayList.o ArrayListEnumerator.o ExecList.o 24 | $(AR_AMIGAOS) -crs Collections.a $^ 25 | pushd .. && rm -f Collections.a && ln -s Collections/Collections.a && popd 26 | cp $@ $(DISTDIR)/lib 27 | 28 | # diss: startup.o 29 | # $(OBJDUMP_AMIGAOS) -S -d -x startup.o 30 | 31 | %.asm: %.c 32 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $< -o $@ 33 | 34 | clean: 35 | rm -f *.o Collections.a *.sym *.asm aqb.log stub.c 36 | 37 | -------------------------------------------------------------------------------- /src/lib/GadToolsSupport/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: stub.c GadToolsSupport.a GadToolsSupport.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 9 | 10 | GadToolsSupport.sym : GadToolsSupport.bas 11 | $(AQB) -L .. -d _aqb -s GadToolsSupport.sym $< 12 | pushd .. && rm -f GadToolsSupport.sym GadToolsSupport.a && ln -s GadToolsSupport/GadToolsSupport.sym && ln -s GadToolsSupport/GadToolsSupport.a && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | GadToolsSupport.a: GadToolsSupport.o gtbutton.o gtcheckbox.o gtslider.o gttext.o gtscroller.o gtstring.o gtinteger.o gtnumber.o gtmx.o gtcycle.o gtpalette.o gtlistview.o 18 | $(AR_AMIGAOS) -crs GadToolsSupport.a $^ 19 | pushd .. && rm -f GadToolsSupport.a && ln -s GadToolsSupport/GadToolsSupport.a && popd 20 | cp $@ $(DISTDIR)/lib 21 | 22 | stub.c: GadToolsSupport.bas 23 | $(AQB) -L .. -d _brt -S $@ $< 24 | 25 | %.asm: %.c 26 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 27 | 28 | clean: 29 | rm -f *.o GadToolsSupport.a *.sym *.asm aqb.log 30 | 31 | -------------------------------------------------------------------------------- /src/lib/IFFSupport/IFFSupport.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_IFF_SUPPORT_H 2 | #define HAVE_IFF_SUPPORT_H 3 | 4 | #include "_aqb.h" 5 | 6 | /* 7 | * IFF / ILBM support 8 | */ 9 | 10 | #define ERR_IFF 500 11 | 12 | #define mskNone 0 13 | #define mskHasMask 1 14 | #define mskHasTransparentColor 2 15 | #define mskLasso 3 16 | 17 | typedef struct 18 | { 19 | // BitMapHeader (BMHD chunk) 20 | 21 | UWORD w, h; // raster width & height in pixels 22 | WORD x, y; // position for this image 23 | UBYTE nPlanes; // # source bitplanes 24 | UBYTE masking; // masking technique 25 | UBYTE compression; // compression algorithm 26 | UBYTE pad1; // UNUSED. For consistency, put 0 here. 27 | UWORD transparentColor; // transparent "color number" 28 | UBYTE xAspect, yAspect; // aspect ratio, a rational number x/y 29 | WORD pageWidth, pageHeight; // source "page" size in pixels 30 | 31 | // CAMG (optional) 32 | 33 | ULONG viewModes; 34 | 35 | } ILBM_META_t; 36 | 37 | void ILBM_LOAD_BITMAP (STRPTR path, BITMAP_t **bm, SHORT scid, ILBM_META_t *pMeta, PALETTE_t *pPalette, BOOL cont); 38 | void ILBM_READ_BITMAP (USHORT fno, BITMAP_t **bm, SHORT scid, ILBM_META_t *pMeta, PALETTE_t *pPalette, BOOL cont); 39 | 40 | void IFF8SVX_LOAD_WAVE (STRPTR path, WAVE_t **w); 41 | void IFF8SVX_READ_WAVE (USHORT fno, WAVE_t **w); 42 | 43 | #endif 44 | 45 | -------------------------------------------------------------------------------- /src/lib/IFFSupport/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: IFFSupport.a IFFSupport.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 9 | 10 | IFFSupport.sym : IFFSupport.bas 11 | $(AQB) -L .. -d _aqb -s IFFSupport.sym $< 12 | pushd .. && rm -f IFFSupport.sym IFFSupport.a && ln -s IFFSupport/IFFSupport.sym && ln -s IFFSupport/IFFSupport.a && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | IFFSupport.a: IFFSupport.o 18 | $(AR_AMIGAOS) -crs IFFSupport.a $^ 19 | pushd .. && rm -f IFFSupport.a && ln -s IFFSupport/IFFSupport.a && popd 20 | cp $@ $(DISTDIR)/lib 21 | 22 | %.asm: %.c 23 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 24 | 25 | clean: 26 | rm -f *.o IFFSupport.a *.sym *.asm aqb.log 27 | 28 | -------------------------------------------------------------------------------- /src/lib/IntuiSupport/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: stub.c IntuiSupport.a IntuiSupport.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 9 | 10 | IntuiSupport.sym : IntuiSupport.bas 11 | $(AQB) -L .. -d _aqb -s IntuiSupport.sym $< 12 | pushd .. && rm -f IntuiSupport.sym IntuiSupport.a && ln -s IntuiSupport/IntuiSupport.sym && ln -s IntuiSupport/IntuiSupport.a && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | IntuiSupport.a: IntuiSupport.o menu.o menuitemtext.o menuitemseparator.o menuitem.o 18 | $(AR_AMIGAOS) -crs IntuiSupport.a $^ 19 | pushd .. && rm -f IntuiSupport.a && ln -s IntuiSupport/IntuiSupport.a && popd 20 | cp $@ $(DISTDIR)/lib 21 | 22 | stub.c: IntuiSupport.bas 23 | $(AQB) -L .. -d _brt -S $@ $< 24 | 25 | %.asm: %.c 26 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 27 | 28 | clean: 29 | rm -f *.o IntuiSupport.a *.sym *.asm aqb.log 30 | 31 | -------------------------------------------------------------------------------- /src/lib/IntuiSupport/menuitem.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/lib/IntuiSupport/menuitem.c -------------------------------------------------------------------------------- /src/lib/OSDevices/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSDevices.sym 6 | 7 | OSDevices.sym : OSDevices.bas 8 | $(AQB) -L .. -I -d _brt -s OSDevices.sym $< 9 | # pushd .. && rm -f OSDevices.sym OSDevices.a && ln -s OSDevices/OSDevices.sym && ln -s OSDevices/OSDevices.a && popd 10 | pushd .. && rm -f OSDevices.sym && ln -s OSDevices/OSDevices.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/OSExec/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSExec.sym 6 | 7 | OSExec.sym : OSExec.bas 8 | $(AQB) -L .. -I -d _brt -s OSExec.sym $< 9 | # pushd .. && rm -f OSExec.sym OSExec.a && ln -s OSExec/OSExec.sym && ln -s OSExec/OSExec.a && popd 10 | pushd .. && rm -f OSExec.sym && ln -s OSExec/OSExec.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/OSGadTools/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSGadTools.sym OSGadTools.a 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 9 | 10 | OSGadTools.sym : OSGadTools.bas 11 | $(AQB) -L .. -d _brt -s OSGadTools.sym $< 12 | pushd .. && rm -f OSGadTools.sym OSGadTools.a && ln -s OSGadTools/OSGadTools.sym && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | OSGadTools.a: OSGadTools.o 18 | $(AR_AMIGAOS) -crs OSGadTools.a $^ 19 | pushd .. && rm -f OSGadTools.a && ln -s OSGadTools/OSGadTools.a && popd 20 | cp $@ $(DISTDIR)/lib 21 | 22 | %.asm: %.c 23 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../_aqb $< -o $@ 24 | 25 | clean: 26 | rm -f *.o OSGadTools.a *.sym *.asm aqb.log 27 | 28 | -------------------------------------------------------------------------------- /src/lib/OSGadTools/OSGadTools.c: -------------------------------------------------------------------------------- 1 | //#define ENABLE_DPRINTF 2 | #include "../_aqb/_aqb.h" 3 | #include "../_brt/_brt.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | #include 20 | #include 21 | 22 | struct Library *GadToolsBase = NULL; 23 | 24 | static void _OSGadTools_shutdown(void) 25 | { 26 | DPRINTF ("_OSGadTools_shutdown called\n"); 27 | 28 | if (GadToolsBase) 29 | { 30 | DPRINTF ("_OSGadTools_shutdown CloseLibrary (GadToolsBase)\n"); 31 | CloseLibrary (GadToolsBase); 32 | } 33 | 34 | DPRINTF ("_OSGadTools_shutdown done\n"); 35 | } 36 | 37 | void _OSGadTools_init(void) 38 | { 39 | if (!(GadToolsBase = OpenLibrary((CONST_STRPTR) "gadtools.library", 0))) 40 | _cshutdown(20, (UBYTE *)"*** error: failed to open gadtools.library!\n"); 41 | 42 | DPRINTF("OSGadtools: gadtools.library version=%d, revision=%d, id=%s\n", 43 | (int)GadToolsBase->lib_Version, 44 | (int)GadToolsBase->lib_Revision, 45 | GadToolsBase->lib_IdString); 46 | 47 | ON_EXIT_CALL(_OSGadTools_shutdown); 48 | } 49 | 50 | -------------------------------------------------------------------------------- /src/lib/OSGraphics/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSGraphics.sym 6 | 7 | OSGraphics.sym : OSGraphics.bas 8 | $(AQB) -L .. -I -d _brt -s OSGraphics.sym $< 9 | # pushd .. && rm -f OSGraphics.sym OSGraphics.a && ln -s OSGraphics/OSGraphics.sym && ln -s OSGraphics/OSGraphics.a && popd 10 | pushd .. && rm -f OSGraphics.sym && ln -s OSGraphics/OSGraphics.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/OSHardware/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSHardware.sym 6 | 7 | OSHardware.sym : OSHardware.bas 8 | $(AQB) -L .. -I -d _brt -s OSHardware.sym $< 9 | # pushd .. && rm -f OSHardware.sym OSHardware.a && ln -s OSHardware/OSHardware.sym && ln -s OSHardware/OSHardware.a && popd 10 | pushd .. && rm -f OSHardware.sym && ln -s OSHardware/OSHardware.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/OSIntuition/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSIntuition.sym 6 | 7 | OSIntuition.sym : OSIntuition.bas 8 | $(AQB) -L .. -I -d _brt -s OSIntuition.sym $< 9 | # pushd .. && rm -f OSIntuition.sym OSIntuition.a && ln -s OSIntuition/OSIntuition.sym && ln -s OSIntuition/OSIntuition.a && popd 10 | pushd .. && rm -f OSIntuition.sym && ln -s OSIntuition/OSIntuition.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/OSUtility/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: OSUtility.sym 6 | 7 | OSUtility.sym : OSUtility.bas 8 | $(AQB) -L .. -I -d _brt -s OSUtility.sym $< 9 | # pushd .. && rm -f OSUtility.sym OSUtility.a && ln -s OSUtility/OSUtility.sym && ln -s OSUtility/OSUtility.a && popd 10 | pushd .. && rm -f OSUtility.sym && ln -s OSUtility/OSUtility.sym && popd 11 | cp $< $(DISTDIR)/libsrc 12 | cp $@ $(DISTDIR)/lib 13 | rm -f $(DISTDIR)/lib/*.uaem 14 | 15 | clean: 16 | rm -f *.sym aqb.log 17 | 18 | -------------------------------------------------------------------------------- /src/lib/_aqb/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: _aqb.a _aqb.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $< -o $@ 9 | 10 | %.o : %.s 11 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 12 | 13 | _aqb.sym : _aqb.bas 14 | $(AQB) -L .. -d _brt -s _aqb.sym $< 15 | pushd .. && rm -f _aqb.sym _aqb.a && ln -s _aqb/_aqb.sym && ln -s _aqb/_aqb.a && popd 16 | cp $< $(DISTDIR)/libsrc 17 | cp $@ $(DISTDIR)/lib 18 | rm -f $(DISTDIR)/lib/*.uaem 19 | 20 | _aqb.a: awindow.o _aqb.o atimer.o asound.o atags.o 21 | $(AR_AMIGAOS) -crs _aqb.a $^ 22 | pushd .. && rm -f _aqb.a && ln -s _aqb/_aqb.a && popd 23 | cp $@ $(DISTDIR)/lib 24 | 25 | %.asm: %.c 26 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $< -o $@ 27 | 28 | clean: 29 | rm -f *.o _aqb.a *.sym *.asm aqb.log 30 | 31 | -------------------------------------------------------------------------------- /src/lib/_brt/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all diss 4 | 5 | all: _brt_stub.c startup.o _brt.a _brt.sym 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $< -o $@ 9 | 10 | _brt.sym : _brt.bas 11 | $(AQB) -d none -s $@ $< 12 | pushd .. && rm -f _brt.sym && ln -s _brt/_brt.sym && popd 13 | cp $< $(DISTDIR)/libsrc 14 | cp $@ $(DISTDIR)/lib 15 | rm -f $(DISTDIR)/lib/*.uaem 16 | 17 | %.o : %.s 18 | $(AS_AMIGAOS) $(ASFLAGS_AMIGAOS) $< -o $@ 19 | 20 | %.o : %.S 21 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $< -o $@ 22 | 23 | _brt.a: cstartup.o astr.o amath.o autil.o carray.o data.o dprintf.o aio.o oop.o memmove.o bcopy.o gc.o 24 | $(AR_AMIGAOS) -crs _brt.a $^ 25 | pushd .. && rm -f startup.o _brt.a && ln -s _brt/startup.o && ln -s _brt/_brt.a && popd 26 | cp $@ $(DISTDIR)/lib 27 | cp startup.o $(DISTDIR)/lib 28 | 29 | diss: startup.o 30 | $(OBJDUMP_AMIGAOS) -S -d -x startup.o 31 | 32 | %.asm: %.c 33 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $< -o $@ 34 | 35 | _brt_stub.c: _brt.bas 36 | $(AQB) -L .. -d none -S $@ $< 37 | 38 | clean: 39 | rm -f *.o alibtest _brt.a *.sym *.asm aqb.log _brt_stub.c 40 | 41 | -------------------------------------------------------------------------------- /src/lib/_brt/gc.c: -------------------------------------------------------------------------------- 1 | 2 | #define ENABLE_DPRINTF 3 | 4 | #include "_brt.h" 5 | 6 | /* 7 | * AQB garbage collector 8 | */ 9 | 10 | 11 | // garbage collector main entry 12 | void GC_RUN (void) 13 | { 14 | DPRINTF ("GC_RUN: starts.\n"); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/lib/_brt/memmove.c: -------------------------------------------------------------------------------- 1 | #define __NO_INLINE__ 2 | #include 3 | __stdargs void *memmove(void *s1, const void *s2, size_t n) { 4 | extern __stdargs void bcopy(); 5 | 6 | bcopy(s2, s1, n); 7 | return s1; 8 | } 9 | -------------------------------------------------------------------------------- /src/lib/_brt/oop.c: -------------------------------------------------------------------------------- 1 | #include "_brt.h" 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | STRPTR _COBJECT_TOSTRING_ (CObject *THIS) 9 | { 10 | // 'obj@0xXXXXXXXX\0' -> 15 chars 11 | UBYTE *str2 = ALLOCATE_(15, MEMF_ANY); 12 | str2[0]='o'; 13 | str2[1]='b'; 14 | str2[2]='j'; 15 | str2[3]='@'; 16 | _astr_itoa_ext ((intptr_t)THIS, &str2[4], 16, FALSE, /*positive_sign=*/FALSE); 17 | str2[14]=0; 18 | return (STRPTR) str2; 19 | } 20 | 21 | BOOL _COBJECT_EQUALS_ (CObject *THIS, CObject *obj) 22 | { 23 | return THIS == obj; 24 | } 25 | 26 | ULONG _COBJECT_GETHASHCODE_ (CObject *THIS) 27 | { 28 | return (intptr_t) THIS; 29 | } 30 | 31 | static void * _CObject_vtable[] = { 32 | (void*) _COBJECT_TOSTRING_, 33 | (void*) _COBJECT_EQUALS_, 34 | (void*) _COBJECT_GETHASHCODE_ 35 | }; 36 | 37 | void _COBJECT___init (CObject *THIS) 38 | { 39 | THIS->_vTablePtr = (void ***) &_CObject_vtable; 40 | } 41 | 42 | 43 | -------------------------------------------------------------------------------- /src/lib/minbrt/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | .PRECIOUS: %.s 6 | 7 | all: minbrt.asm minbrt.o prolog.o 8 | 9 | %.s: %.c 10 | $(CC_AMIGAOS) -S -Wall -Werror -march=68000 -mcpu=68000 $< -o $@ 11 | 12 | %.o: %.s 13 | $(AS_AMIGAOS) $< -o $@ 14 | 15 | %.asm: %.s 16 | ./as2mot.py $< > $@ 17 | 18 | clean: 19 | rm -f minbrt.asm minbrt.s prolog.o minbrt.o 20 | 21 | -------------------------------------------------------------------------------- /src/lib/minbrt/prolog.asm: -------------------------------------------------------------------------------- 1 | SECTION prolog,CODE 2 | 3 | MOVE.L sp, ___SaveSP 4 | 5 | JSR __minbrt_startup 6 | 7 | XDEF __autil_exit 8 | __autil_exit: 9 | 10 | JSR __minbrt_exit 11 | 12 | MOVE.L 4(sp), d0 ; return code 13 | MOVE.L ___SaveSP,sp 14 | 15 | RTS 16 | 17 | SECTION prolog_data, DATA 18 | XDEF ___SaveSP 19 | EVEN 20 | ___SaveSP: 21 | DC.L 0 22 | 23 | XDEF __break_status 24 | EVEN 25 | __break_status: 26 | DC.L 0 27 | 28 | -------------------------------------------------------------------------------- /src/lib/minbrt/prolog.s: -------------------------------------------------------------------------------- 1 | .text 2 | 3 | MOVE.L sp, ___SaveSP 4 | 5 | JSR __minbrt_startup 6 | 7 | .align 2 8 | .globl __autil_exit 9 | __autil_exit: 10 | 11 | JSR __minbrt_exit 12 | 13 | MOVE.L 4(sp), d0 14 | MOVE.L ___SaveSP,sp 15 | 16 | RTS 17 | 18 | 19 | .align 2 20 | .data 21 | .globl ___SaveSP 22 | ___SaveSP: 23 | DC.L 0 24 | 25 | .globl __break_status 26 | __break_status: 27 | DC.L 0 28 | 29 | -------------------------------------------------------------------------------- /src/tools/Makefile: -------------------------------------------------------------------------------- 1 | 2 | .PHONY: clean all runner printfloat dumpfonts rtgblit areaptrn gctest loadfont 3 | 4 | all: runner printfloat dumpfonts rtgblit areaptrn gctest loadfont 5 | 6 | runner: 7 | make -C $@ all 8 | 9 | printfloat: 10 | make -C $@ all 11 | 12 | dumpfonts: 13 | make -C $@ all 14 | 15 | rtgblit: 16 | make -C $@ all 17 | 18 | loadfont: 19 | make -C $@ all 20 | 21 | areaptrn: 22 | make -C $@ all 23 | 24 | gctest: 25 | make -C $@ all 26 | 27 | clean: 28 | make -C ffputils clean 29 | make -C runner clean 30 | make -C printfloat clean 31 | make -C dumpfonts clean 32 | make -C rtgblit clean 33 | make -C areaptrn clean 34 | make -C gctest clean 35 | make -C loadfont clean 36 | -------------------------------------------------------------------------------- /src/tools/areaptrn/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = areaptrn.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/areaptrn 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/areaptrn 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/areaptrn: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/areaptrn 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/areaptrn 31 | 32 | -------------------------------------------------------------------------------- /src/tools/boopsitest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | CFLAGS_AMIGAOS2 = -O3 -march=68000 -mcpu=68000 -mcrt=nix20 -I$(SELF_DIR)/src/amigasupport 4 | 5 | SRCS = bitest.c 6 | 7 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 8 | 9 | .PHONY: clean all 10 | all: $(BINDIR_AMIGAOS)/bitest 11 | 12 | clean: 13 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/bitest bitest.asm 14 | rm -rf $(DEPDIR_AMIGAOS) 15 | 16 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 17 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 18 | 19 | ${BINDIR_AMIGAOS}/bitest: $(OBJS_AMIGAOS) $(SELF_DIR)/src/amigasupport/amigasupport.a 20 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ $(SELF_DIR)/src/amigasupport/amigasupport.a 21 | # $(STRIP_AMIGAOS) $@ 22 | cp $@ $(DISTDIR) 23 | 24 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 25 | 26 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 27 | $(DEPFILES_AMIGAOS): 28 | 29 | include $(wildcard $(DEPFILES_AMIGAOS)) 30 | 31 | diss: ${BINDIR_AMIGAOS}/bitest 32 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/bitest 33 | 34 | %.asm: %.c 35 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $< -o $@ 36 | 37 | -------------------------------------------------------------------------------- /src/tools/dumpfonts/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = dumpfonts.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/dumpfonts 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/dumpfonts 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/dumpfonts: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/dumpfonts 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/dumpfonts 31 | 32 | -------------------------------------------------------------------------------- /src/tools/ffpmath/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = ffpmath.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/ffpmath 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/ffpmath ffpmath.asm 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../../lib $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/ffpmath: $(OBJS_AMIGAOS) 18 | ${LD_AMIGAOS} ../../lib/_brt/startup.o $^ ../../lib/_brt/_brt.a -o $@ 19 | cp $@ $(DISTDIR) 20 | 21 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 22 | 23 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 24 | $(DEPFILES_AMIGAOS): 25 | 26 | include $(wildcard $(DEPFILES_AMIGAOS)) 27 | 28 | diss: ${BINDIR_AMIGAOS}/ffpmath 29 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/ffpmath 30 | 31 | %.asm: %.c 32 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../../lib $< -o $@ 33 | -------------------------------------------------------------------------------- /src/tools/ffpmath/ffpmath.c: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | //#include 4 | //#include 5 | //#include 6 | //#include 7 | #include 8 | //#include 9 | 10 | #include 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | 19 | #include <_brt/_brt.h> 20 | 21 | ULONG _aqb_stack_size = 8192; 22 | 23 | int _aqb_main (int argc, char *argv[]) 24 | { 25 | 26 | FLOAT f3 = SPFlt(31415)/SPFlt(10000); 27 | _debug_puts((STRPTR) "f3="); 28 | _debug_putf(f3); 29 | _debug_putnl(); 30 | 31 | if (f3 > SPFlt(3)) 32 | _debug_puts((STRPTR) ">3\n"); 33 | 34 | return 0; 35 | } 36 | 37 | -------------------------------------------------------------------------------- /src/tools/ffptest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = ffptest.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/ffptest 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/ffptest ffptest.asm 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../../lib $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/ffptest: $(OBJS_AMIGAOS) 18 | ${LD_AMIGAOS} ../../lib/_brt/startup.o $^ ../../lib/_brt/_brt.a -o $@ 19 | cp $@ $(DISTDIR) 20 | 21 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 22 | 23 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 24 | $(DEPFILES_AMIGAOS): 25 | 26 | include $(wildcard $(DEPFILES_AMIGAOS)) 27 | 28 | diss: ${BINDIR_AMIGAOS}/ffptest 29 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/ffptest 30 | 31 | %.asm: %.c 32 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../../lib $< -o $@ 33 | -------------------------------------------------------------------------------- /src/tools/ffputils/Makefile: -------------------------------------------------------------------------------- 1 | 2 | CFLAGS = -O -Wall -Werror 3 | ASFLAGS = 4 | LDFLAGS = -lm 5 | 6 | CC = gcc 7 | AS = as 8 | LD = ld 9 | AR = ar 10 | 11 | .PHONY: clean all 12 | 13 | all: ffputils 14 | 15 | %.o : %.c 16 | $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ 17 | 18 | alibtest: ffputils.o 19 | $(LD) $(LDFLAGS) $^ -o $@ 20 | 21 | clean: 22 | rm -f *.o ffputils 23 | 24 | -------------------------------------------------------------------------------- /src/tools/gctest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = gctest.c tgc.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/gctest 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/gctest 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ./%.s : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 18 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 19 | 20 | ${BINDIR_AMIGAOS}/gctest: $(OBJS_AMIGAOS) 21 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ 22 | # $(STRIP_AMIGAOS) $@ 23 | cp $@ $(DISTDIR) 24 | 25 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 26 | 27 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 28 | $(DEPFILES_AMIGAOS): 29 | 30 | include $(wildcard $(DEPFILES_AMIGAOS)) 31 | 32 | diss: ${BINDIR_AMIGAOS}/gctest 33 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/gctest 34 | 35 | -------------------------------------------------------------------------------- /src/tools/gtltest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | CFLAGS_AMIGAOS2 = -O3 -march=68000 -mcpu=68000 -nostdlib -fno-builtin -I$(SELF_DIR)/src/commonrt/minrt 4 | 5 | LDFLAGS_AMIGAOS = 6 | 7 | STARTUP = $(SELF_DIR)/src/commonrt/startup/startup.o 8 | MINRT = $(SELF_DIR)/src/commonrt/minrt/minrt.a 9 | 10 | SRCS = gtltest.c 11 | 12 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 13 | 14 | .PHONY: clean all 15 | all: $(BINDIR_AMIGAOS)/gtltest 16 | 17 | clean: 18 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/gtltest gtltest.asm 19 | rm -rf $(DEPDIR_AMIGAOS) 20 | 21 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 22 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS2) $(DEPFLAGS_AMIGAOS) $< -o $@ 23 | 24 | ${BINDIR_AMIGAOS}/gtltest: $(OBJS_AMIGAOS) 25 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS2) $(LDFLAGS_AMIGAOS) -o $@ $(STARTUP) $^ $(MINRT) 26 | # $(STRIP_AMIGAOS) $@ 27 | cp $@ $(DISTDIR) 28 | 29 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 30 | 31 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 32 | $(DEPFILES_AMIGAOS): 33 | 34 | include $(wildcard $(DEPFILES_AMIGAOS)) 35 | 36 | diss: ${BINDIR_AMIGAOS}/gtltest 37 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/gtltest 38 | 39 | %.asm: %.c 40 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS2) $< -o $@ 41 | 42 | -------------------------------------------------------------------------------- /src/tools/gtltest/include/libraries/gtlayout.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/tools/gtltest/include/libraries/gtlayout.h -------------------------------------------------------------------------------- /src/tools/gtltest/include/proto/gtlayout_protos.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/tools/gtltest/include/proto/gtlayout_protos.h -------------------------------------------------------------------------------- /src/tools/loadfont/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = loadfont.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/loadfont 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/loadfont 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/loadfont: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/loadfont 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/loadfont 31 | 32 | %.asm: %.c 33 | $(CC_AMIGAOS) -S -g $(CFLAGS_AMIGAOS) $< -o $@ 34 | 35 | -------------------------------------------------------------------------------- /src/tools/md2amiga/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Frost Ming 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line. 5 | SPHINXOPTS = 6 | SPHINXBUILD = sphinx-build 7 | SPHINXPROJ = Marko 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/_templates/sidebarintro.html: -------------------------------------------------------------------------------- 1 |

Marko

2 |

3 | 5 |

6 | -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/api.rst: -------------------------------------------------------------------------------- 1 | API References 2 | ============== 3 | 4 | .. module:: marko 5 | 6 | Main Class 7 | ---------- 8 | 9 | .. autoclass:: Markdown 10 | :inherited-members: 11 | 12 | 13 | Parser Class 14 | ------------ 15 | 16 | .. module:: marko.parser 17 | 18 | .. autoclass:: Parser 19 | :inherited-members: 20 | 21 | Renderer Class 22 | -------------- 23 | 24 | .. module:: marko.renderer 25 | 26 | .. autoclass:: Renderer 27 | :inherited-members: 28 | 29 | .. _elements: 30 | 31 | Base Elements 32 | ------------- 33 | 34 | .. autoclass:: marko.block.BlockElement 35 | :members: 36 | :inherited-members: 37 | 38 | .. autoclass:: marko.inline.InlineElement 39 | :members: 40 | :inherited-members: 41 | 42 | Helper Classes 43 | -------------- 44 | 45 | .. autoclass:: marko.helpers.Source 46 | :members: 47 | -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/extensions.rst: -------------------------------------------------------------------------------- 1 | Built-in Extensions 2 | =================== 3 | 4 | .. automodule:: marko.ext.gfm 5 | 6 | .. automodule:: marko.ext.toc 7 | 8 | .. automodule:: marko.ext.footnote 9 | 10 | .. automodule:: marko.ext.pangu 11 | 12 | .. automodule:: marko.ext.codehilite 13 | -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=_build 12 | set SPHINXPROJ=Marko 13 | 14 | if "%1" == "" goto help 15 | 16 | %SPHINXBUILD% >NUL 2>NUL 17 | if errorlevel 9009 ( 18 | echo. 19 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 20 | echo.installed, then set the SPHINXBUILD environment variable to point 21 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 22 | echo.may add the Sphinx directory to PATH. 23 | echo. 24 | echo.If you don't have Sphinx installed, grab it from 25 | echo.http://sphinx-doc.org/ 26 | exit /b 1 27 | ) 28 | 29 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 30 | goto end 31 | 32 | :help 33 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% 34 | 35 | :end 36 | popd 37 | -------------------------------------------------------------------------------- /src/tools/md2amiga/docs/reqs.txt: -------------------------------------------------------------------------------- 1 | python-slugify 2 | -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/__main__.py: -------------------------------------------------------------------------------- 1 | r""" 2 | _ _ _ ___ _ _ ___ 3 | | \ / | /_\ | _ \ | |/ / / _ \ 4 | | |\/| | / _ \ | / | ' < | (_) | 5 | |_| |_| /_/ \_\ |_|_\ |_|\_\ \___/ 6 | 7 | A markdown parser with high extensibility. 8 | 9 | Licensed under MIT. 10 | Created by Frost Ming 11 | """ 12 | from . import cli 13 | 14 | 15 | if __name__ == "__main__": 16 | cli.main() 17 | -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/ext/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | This is the place to put extension classes and mixins. 3 | Also show as examples of extending Marko. 4 | """ 5 | -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/ext/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/tools/md2amiga/marko/ext/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/ext/__pycache__/footnote.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/tools/md2amiga/marko/ext/__pycache__/footnote.cpython-39.pyc -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/ext/__pycache__/toc.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gooofy/aqb/bdaa005eb2ed04d16dfb6ccdc7f43e37883016b7/src/tools/md2amiga/marko/ext/__pycache__/toc.cpython-39.pyc -------------------------------------------------------------------------------- /src/tools/md2amiga/marko/ext/pangu.py: -------------------------------------------------------------------------------- 1 | """ 2 | Pangu Extension 3 | ~~~~~~~~~~~~~~~ 4 | 5 | Separate CJK characters with latin letters. 6 | 7 | Reference: `vinta's pangu project `_ 8 | 9 | Example:: 10 | 11 | input: 中国有13亿人口 12 | output: 中国有13亿人口 13 | 14 | from marko import Markdown 15 | 16 | markdown = Markdown(extensions=['pangu']) 17 | print(markdown(text)) 18 | """ 19 | import re 20 | 21 | CJK_RE = ( 22 | r"\u2e80-\u2eff\u2f00-\u2fdf\u3040-\u309f\u30a0-\u30ff\u3100-\u312f" 23 | r"\u3200-\u32ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff" 24 | ) 25 | LATIN_RE = r"a-zA-Z0-9" 26 | PANGU_RE = re.compile( 27 | r"((?<=[{cjk}])(?=[{latin}])|(?<=[{latin}])(?=[{cjk}]))".format( 28 | cjk=CJK_RE, latin=LATIN_RE 29 | ) 30 | ) 31 | 32 | 33 | class PanguRendererMixin: 34 | def render_raw_text(self, element): 35 | rv = super().render_raw_text(element) 36 | return PANGU_RE.sub('', rv) 37 | 38 | 39 | class Pangu: 40 | renderer_mixins = [PanguRendererMixin] 41 | 42 | 43 | def make_extension(): 44 | return Pangu() 45 | -------------------------------------------------------------------------------- /src/tools/md2amiga/noxfile.py: -------------------------------------------------------------------------------- 1 | import nox 2 | import os 3 | 4 | os.environ.update(PDM_IGNORE_SAVED_PYTHON="1") 5 | 6 | 7 | @nox.session(python=["3.6", "3.8", "3.9"]) 8 | def tests(session): 9 | session.run("pdm", "install", "-d", external=True) 10 | session.run("pytest", "tests/") 11 | 12 | 13 | @nox.session 14 | def benchmark(session): 15 | session.run("pdm", "install", "-s", "benchmark", external=True) 16 | session.run("python", "-m", "tests.benchmark") 17 | -------------------------------------------------------------------------------- /src/tools/md2amiga/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["pdm-pep517"] 3 | build-backend = "pdm.pep517.api" 4 | 5 | [project] 6 | # PEP 621 project metadata 7 | # See https://www.python.org/dev/peps/pep-0621/ 8 | authors = [ 9 | {name = "Frost Ming", email = "mianghong@gmail.com"}, 10 | ] 11 | dynamic = ["version", "classifiers"] 12 | version = {from = "marko/__init__.py"} 13 | requires-python = ">=3.6" 14 | license = {text = "MIT"} 15 | dependencies = [] 16 | description = "A markdown parser with high extensibility." 17 | name = "marko" 18 | readme = "README.md" 19 | classifiers = [ 20 | "Development Status :: 5 - Production/Stable", 21 | "Intended Audience :: Developers", 22 | 'Operating System :: OS Independent', 23 | ] 24 | 25 | [project.urls] 26 | homepage = "https://github.com/frostming/marko" 27 | Documentation = "https://marko-py.readthedocs.io" 28 | 29 | [project.optional-dependencies] 30 | toc = ["python-slugify"] 31 | codehilite = ["pygments"] 32 | benchmark = [ 33 | "commonmark~=0.9", 34 | "markdown~=3.3", 35 | "markdown-it-py~=0.6", 36 | "mistune~=0.8", 37 | "mistletoe~=0.7", 38 | ] 39 | 40 | [project.scripts] 41 | marko = "marko.cli:main" 42 | 43 | [tool] 44 | [tool.pdm] 45 | [tool.pdm.dev-dependencies] 46 | dev = [ 47 | "pytest<7.0.0,>=6.1.2", 48 | "pytest-cov<3.0.0,>=2.10.1", 49 | "mypy", 50 | "nox~=2020.12", 51 | ] 52 | -------------------------------------------------------------------------------- /src/tools/md2amiga/setup.cfg: -------------------------------------------------------------------------------- 1 | [coverage:run] 2 | branch = True 3 | parallel = True 4 | source = marko/ 5 | omit = 6 | marko/cli.py 7 | marko/__main__.py 8 | 9 | [coverage:report] 10 | # Regexes for lines to exclude from consideration 11 | exclude_lines = 12 | # Have to re-enable the standard pragma 13 | pragma: no cover 14 | 15 | # Don't complain about missing debug-only code: 16 | def __repr__ 17 | 18 | # Don't complain if tests don't hit defensive assertion code: 19 | raise AssertionError 20 | raise NotImplementedError 21 | # Don't complain if non-runnable code isn't run: 22 | if __name__ == .__main__.: 23 | # Don't complain type checking 24 | if is_type_check 25 | 26 | [flake8] 27 | ignore = E203,E501,W503,W504,W605,E741 28 | 29 | [mypy-tests.*] 30 | ignore_errors = True 31 | 32 | [mypy-setup] 33 | ignore_errors = True 34 | 35 | [mypy-pygments.*] 36 | ignore_missing_imports = True 37 | -------------------------------------------------------------------------------- /src/tools/md2amiga/setup.py: -------------------------------------------------------------------------------- 1 | # This a dummy setup.py to enable GitHub "Used By" stats 2 | from setuptools import setup 3 | 4 | 5 | setup(name="marko") 6 | -------------------------------------------------------------------------------- /src/tools/md2amiga/tests/spec.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | VERSION=$1 6 | 7 | if [ -z "$VERSION" ]; then 8 | echo 'Please give spec version to dump: ./spec.sh $VERSION' 9 | exit 1 10 | fi 11 | 12 | function main { 13 | echo "Downloading spec file $VERSION..." 14 | curl "https://raw.githubusercontent.com/commonmark/commonmark-spec/$VERSION/spec.txt" -o spec/commonmark.txt 15 | # No corresponding tag on GFM spec, use master anyway 16 | curl "https://raw.githubusercontent.com/github/cmark-gfm/master/test/spec.txt" -o spec/gfm.txt 17 | 18 | echo "Done." 19 | } 20 | 21 | main 22 | -------------------------------------------------------------------------------- /src/tools/md2amiga/tests/test_spec.py: -------------------------------------------------------------------------------- 1 | from tests import SpecTestSuite 2 | from marko import Markdown 3 | from marko.ext.gfm import gfm 4 | 5 | 6 | class TestCommonMark(SpecTestSuite): 7 | @classmethod 8 | def setup_class(cls): 9 | cls.markdown = Markdown() 10 | 11 | def test_greedy_consume_prefix(self): 12 | md = "> 1. Item 1\n> ```code\n> indented code\n> ```" 13 | html = ( 14 | '
  1. Item 1
    '
    15 |             "   indented code\n
" 16 | ) 17 | self.assert_case(md, html) 18 | 19 | 20 | TestCommonMark.load_spec("commonmark") 21 | 22 | GFM_IGNORE = ["autolinks_015", "autolinks_018", "autolinks_019"] 23 | 24 | 25 | class TestGFM(SpecTestSuite): 26 | @classmethod 27 | def setup_class(cls): 28 | cls.markdown = gfm 29 | 30 | @classmethod 31 | def ignore_case(cls, n): 32 | return n in GFM_IGNORE 33 | 34 | def test_parse_table_with_backslashes(self): 35 | md = "\\\n\n| \\ |\n| - |\n| \\ |" 36 | html = "

\\

\\
\\
" 37 | self.assert_case(md, html) 38 | 39 | 40 | TestGFM.load_spec("gfm") 41 | -------------------------------------------------------------------------------- /src/tools/muitest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | CFLAGS_MUI = -I../../MUI/Developer/C/Include 4 | CFLAGS_AMIGAOS2 = -O3 -march=68000 -mcpu=68000 -mcrt=nix20 -I$(SELF_DIR)/src/amigasupport 5 | 6 | SRCS = muitest.c 7 | 8 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 9 | 10 | .PHONY: clean all 11 | all: $(BINDIR_AMIGAOS)/muitest 12 | 13 | clean: 14 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/muitest muitest.asm 15 | rm -rf $(DEPDIR_AMIGAOS) 16 | 17 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 18 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS) $(CFLAGS_MUI) $(DEPFLAGS_AMIGAOS) $< -o $@ 19 | 20 | ${BINDIR_AMIGAOS}/muitest: $(OBJS_AMIGAOS) $(SELF_DIR)/src/amigasupport/amigasupport.a 21 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ $(SELF_DIR)/src/amigasupport/amigasupport.a 22 | # $(STRIP_AMIGAOS) $@ 23 | cp $@ $(DISTDIR) 24 | 25 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 26 | 27 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 28 | $(DEPFILES_AMIGAOS): 29 | 30 | include $(wildcard $(DEPFILES_AMIGAOS)) 31 | 32 | diss: ${BINDIR_AMIGAOS}/muitest 33 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/muitest 34 | 35 | %.asm: %.c 36 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $(CFLAGS_MUI) $< -o $@ 37 | 38 | -------------------------------------------------------------------------------- /src/tools/printfloat/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = printfloat.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/printfloat 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/printfloat 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -v -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/printfloat: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -v -o $@ $^ 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/printfloat 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/printfloat 31 | 32 | -------------------------------------------------------------------------------- /src/tools/reactiontest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | CFLAGS_AMIGAOS2 = -O3 -march=68000 -mcpu=68000 -mcrt=nix20 -I$(SELF_DIR)/src/amigasupport 4 | 5 | SRCS = ratest.c dprintf.c 6 | 7 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 8 | 9 | .PHONY: clean all 10 | all: $(BINDIR_AMIGAOS)/ratest 11 | 12 | clean: 13 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/ratest ratest.asm 14 | rm -rf $(DEPDIR_AMIGAOS) 15 | 16 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 17 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 18 | 19 | ${BINDIR_AMIGAOS}/ratest: $(OBJS_AMIGAOS) $(SELF_DIR)/src/amigasupport/amigasupport.a 20 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ $(SELF_DIR)/src/amigasupport/amigasupport.a 21 | # $(STRIP_AMIGAOS) $@ 22 | cp $@ $(DISTDIR) 23 | 24 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 25 | 26 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 27 | $(DEPFILES_AMIGAOS): 28 | 29 | include $(wildcard $(DEPFILES_AMIGAOS)) 30 | 31 | diss: ${BINDIR_AMIGAOS}/ratest 32 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/ratest 33 | 34 | %.asm: %.c 35 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) $< -o $@ 36 | 37 | -------------------------------------------------------------------------------- /src/tools/reactiontest/ratest.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_RATEST_H 2 | #define HAVE_RATEST_H 3 | 4 | #define ENABLE_DPRINTF 5 | 6 | #ifdef ENABLE_DPRINTF 7 | 8 | #define DPRINTF(...) dprintf(__VA_ARGS__) 9 | 10 | void dprintf(const char *format, ...); 11 | 12 | #else 13 | 14 | #define DPRINTF(...) 15 | 16 | #endif 17 | 18 | void _debug_putc(char c); 19 | 20 | void dprintf(const char *format, ...); 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /src/tools/rtgblit/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = rtgblit.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/rtgblit 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/rtgblit 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/rtgblit: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/rtgblit 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/rtgblit 31 | 32 | -------------------------------------------------------------------------------- /src/tools/rttest/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | CFLAGS_AMIGAOS2 = -O3 -march=68000 -mcpu=68000 -nostdlib -I$(SELF_DIR)/src/commonrt/minrt 4 | #-mcrt=nix20 -fomit-frame-pointer 5 | # -I$(SELF_DIR)/src/amigasupport 6 | 7 | LDFLAGS_AMIGAOS = 8 | 9 | STARTUP = $(SELF_DIR)/src/commonrt/startup/startup.o 10 | MINRT = $(SELF_DIR)/src/commonrt/minrt/minrt.a 11 | 12 | SRCS = rttest.c 13 | 14 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 15 | 16 | .PHONY: clean all 17 | all: $(BINDIR_AMIGAOS)/rttest 18 | 19 | clean: 20 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/rttest rttest.asm 21 | rm -rf $(DEPDIR_AMIGAOS) 22 | 23 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 24 | $(CC_AMIGAOS) -c -g $(CFLAGS_AMIGAOS2) $(DEPFLAGS_AMIGAOS) $< -o $@ 25 | 26 | ${BINDIR_AMIGAOS}/rttest: $(OBJS_AMIGAOS) 27 | $(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS2) $(LDFLAGS_AMIGAOS) -o $@ $(STARTUP) $^ $(MINRT) 28 | # $(STRIP_AMIGAOS) $@ 29 | cp $@ $(DISTDIR) 30 | 31 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 32 | 33 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 34 | $(DEPFILES_AMIGAOS): 35 | 36 | include $(wildcard $(DEPFILES_AMIGAOS)) 37 | 38 | diss: ${BINDIR_AMIGAOS}/rttest 39 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/rttest 40 | 41 | %.asm: %.c 42 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS2) $< -o $@ 43 | 44 | #$(CC_AMIGAOS) -g $(CFLAGS_AMIGAOS2) $(LDFLAGS_AMIGAOS) -o $@ $^ $(SELF_DIR)/src/amigasupport/amigasupport.a 45 | -------------------------------------------------------------------------------- /src/tools/rttest/rttest.c: -------------------------------------------------------------------------------- 1 | #include "minrt.h" 2 | #include 3 | 4 | ULONG _aqb_stack_size = 0; 5 | 6 | int main(void) 7 | { 8 | printf ("Hello, world!\n"); 9 | return 0; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /src/tools/runner/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | SRCS = main.c run.c logger.c 4 | 5 | OBJS_AMIGAOS := $(patsubst %,${OBJDIR_AMIGAOS}/%.o,$(basename $(SRCS))) 6 | 7 | .PHONY: clean all 8 | all: $(BINDIR_AMIGAOS)/runner 9 | 10 | clean: 11 | rm -f $(OBJDIR_AMIGAOS)/*.o $(BINDIR_AMIGAOS)/runner 12 | rm -rf $(DEPDIR_AMIGAOS) 13 | 14 | $(OBJDIR_AMIGAOS)/%.o : %.c $(DEPDIR_AMIGAOS)/%.d | $(DEPDIR_AMIGAOS) 15 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) $(DEPFLAGS_AMIGAOS) $< -o $@ 16 | 17 | ${BINDIR_AMIGAOS}/runner: $(OBJS_AMIGAOS) 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) $(LDFLAGS_AMIGAOS) -o $@ $^ ../../amigasupport/amigasupport.a 19 | # $(STRIP_AMIGAOS) $@ 20 | cp $@ $(DISTDIR) 21 | 22 | $(DEPDIR_AMIGAOS): ; @mkdir -p $@ 23 | 24 | DEPFILES_AMIGAOS := $(SRCS:%.c=$(DEPDIR_AMIGAOS)/%.d) 25 | $(DEPFILES_AMIGAOS): 26 | 27 | include $(wildcard $(DEPFILES_AMIGAOS)) 28 | 29 | diss: ${BINDIR_AMIGAOS}/runner 30 | $(OBJDUMP_AMIGAOS) -S -d -x ${BINDIR_AMIGAOS}/runner 31 | 32 | -------------------------------------------------------------------------------- /src/tools/runner/logger.c: -------------------------------------------------------------------------------- 1 | #include "logger.h" 2 | 3 | #include 4 | #include 5 | 6 | void runlogger (uint8_t lvl, char *fmt, ...) 7 | { 8 | va_list args; 9 | va_start(args, fmt); 10 | static char buf[1024]; 11 | vsnprintf (buf, 1024, fmt, args); 12 | va_end(args); 13 | printf ("%s", buf); 14 | fflush (stdout); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /src/tools/runner/logger.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_LOGGER_H 2 | #define HAVE_LOGGER_H 3 | 4 | #include 5 | 6 | #define LOG_DEBUG 0 7 | #define LOG_INFO 1 8 | #define LOG_ERROR 2 9 | 10 | #define LOG_LEVEL LOG_DEBUG 11 | //#define LOG_LEVEL LOG_INFO 12 | 13 | void runlogger (uint8_t lvl, char *fmt, ...); 14 | 15 | #define LOG_printf(lvl, ...) do { if (lvl >= LOG_LEVEL) runlogger(lvl, __VA_ARGS__); } while (0) 16 | 17 | #endif 18 | 19 | -------------------------------------------------------------------------------- /src/tools/runner/run.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_RUN_H 2 | #define HAVE_RUN_H 3 | 4 | #ifdef __amigaos__ 5 | 6 | #include 7 | 8 | typedef enum {RUN_stateRunning, RUN_stateStopped} RUN_state; 9 | 10 | void RUN_start (const char *binfn); 11 | 12 | void RUN_init (struct MsgPort *debugPort, struct FileHandle *output); 13 | 14 | void RUN_handleMessages(void); 15 | RUN_state RUN_getState(void); 16 | 17 | void RUN_break (void); 18 | 19 | #endif 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /tests/carray1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' dynamic array LBOUND / UBOUND tests 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM a%(100) 8 | 9 | a%(1) = 42 10 | '_debug_puts2 a%(1) : _debug_putnl 11 | 12 | a%(0) = 23 13 | '_debug_puts2 a%(0) : _debug_putnl 14 | 15 | '_debug_puts2 a%(1) : _debug_putnl 16 | '_debug_puts2 a%(0) : _debug_putnl 17 | 18 | ASSERT a%(1) = 42 19 | ASSERT a%(0) = 23 20 | 21 | ' _debug_puts2 LBOUND(a%) : _debug_putnl 22 | ASSERT LBOUND(a% ) = 0 23 | ASSERT LBOUND(a%, 0) = 1 24 | ASSERT LBOUND(a%, 2) = 0 25 | 26 | ' _debug_puts2 UBOUND(a%) : _debug_putnl 27 | ASSERT UBOUND(a% ) = 100 28 | ASSERT UBOUND(a%, 1) = 100 29 | ASSERT UBOUND(a%, 0) = 1 30 | 31 | FOR i AS INTEGER = 0 to 100 32 | a%(i) = i 33 | NEXT i 34 | 35 | FOR i AS INTEGER = 0 to 100 36 | ASSERT a%(i) = i 37 | NEXT i 38 | 39 | -------------------------------------------------------------------------------- /tests/carray10.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DIM AS INTEGER i=42 4 | DIM AS INTEGER a(1) 5 | 6 | CLEAR ,,1024 7 | 8 | REM TRACE "stack size: ", FRE(-2) 9 | ASSERT FRE(-2)=1024 10 | 11 | REM TRACE i, a(0), a(1) 12 | ASSERT i=42 13 | ASSERT a(0)=0 14 | ASSERT a(1)=0 15 | 16 | i=23 17 | a(0)=1 : a(1)=2 18 | 19 | REM TRACE i, a(0), a(1) 20 | ASSERT i=23 21 | ASSERT a(0)=1 22 | ASSERT a(1)=2 23 | 24 | CLEAR 25 | 26 | REM TRACE i, a(0), a(1) 27 | ASSERT i=42 28 | ASSERT a(0)=0 29 | ASSERT a(1)=0 30 | 31 | -------------------------------------------------------------------------------- /tests/carray2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' whole dynamic array assignment on heap test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | CONST n AS INTEGER = 99 8 | 9 | DIM AS INTEGER a(), b() 10 | 11 | REDIM a(n) 12 | REDIM b(n) 13 | 14 | 'a(1)=2 15 | 'b(1)=2 16 | 17 | FOR i AS INTEGER = 0 to n 18 | a(i) = i 19 | b(i) = i * i 20 | NEXT i 21 | 22 | FOR i AS INTEGER = 0 to n 23 | ' _debug_puts2(a(i)) : _debug_putnl 24 | ASSERT a(i) = i 25 | NEXT i 26 | 27 | a = b 28 | 29 | FOR i AS INTEGER = 0 to n 30 | ASSERT a(i) = i*i 31 | NEXT i 32 | 33 | -------------------------------------------------------------------------------- /tests/carray3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' some simple tests for frame dynamic array access and assignment 3 | ' 4 | 5 | SUB foo () 6 | 7 | DIM a%(100) 8 | 9 | a%(1) = 42 10 | 11 | ' PRINT a%(1) 12 | 13 | a%(0) = 23 14 | 15 | ' PRINT a%(0), a%(1) 16 | 17 | ASSERT a%(1) = 42 18 | ASSERT a%(0) = 23 19 | 20 | FOR i% = 0 to 99 21 | a%(i%) = i% 22 | NEXT i% 23 | 24 | FOR i% = 0 to 99 25 | ASSERT a%(i%) = i% 26 | ' PRINT a%(i%) 27 | NEXT i% 28 | 29 | END SUB 30 | 31 | foo 32 | -------------------------------------------------------------------------------- /tests/carray4.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' two-dim dynamic array test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER a(9, 1), b(9, 1) 8 | 9 | FOR i AS INTEGER = 0 TO 9 10 | ' _debug_puts "fill: i=" :_debug_puts2 i : _debug_putnl 11 | a(i, 0) = i 12 | a(i, 1) = 42 13 | b(i, 0) = 23 14 | b(i, 1) = i 15 | NEXT i 16 | 17 | FOR i AS INTEGER = 0 TO 9 18 | ' _debug_puts "read: i=" :_debug_puts2 i : _debug_putnl 19 | ASSERT a(i, 0) = i 20 | ASSERT a(i, 1) = 42 21 | ASSERT b(i, 0) = 23 22 | ASSERT b(i, 1) = i 23 | NEXT i 24 | 25 | -------------------------------------------------------------------------------- /tests/carray5.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' passing dynamic arrays to subprograms 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER a(9) 8 | 9 | FUNCTION sumup (f() AS INTEGER) AS INTEGER 10 | 11 | DIM s AS INTEGER = 0 12 | 13 | FOR i AS INTEGER = LBOUND(f) TO UBOUND(f) 14 | s = s + f(i) 15 | NEXT i 16 | 17 | RETURN s 18 | END FUNCTION 19 | 20 | FOR i AS INTEGER = LBOUND(a) TO UBOUND(a) 21 | a(i) = i 22 | NEXT i 23 | 24 | ' _debug_puts2 sumup(a) : _debug_putnl 25 | 26 | ASSERT sumup (a) = 45 27 | 28 | -------------------------------------------------------------------------------- /tests/carray6.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' passing dynamic array UDT alias 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | TYPE a_t AS INTEGER() 8 | 9 | DIM a AS a_t 10 | 11 | FUNCTION sumup (f AS a_t) AS INTEGER 12 | 13 | DIM s AS INTEGER = 0 14 | 15 | FOR i AS INTEGER = LBOUND(f) TO UBOUND(f) 16 | s = s + f(i) 17 | NEXT i 18 | 19 | RETURN s 20 | END FUNCTION 21 | 22 | REDIM a(9) 23 | 24 | FOR i AS INTEGER = LBOUND(a) TO UBOUND(a) 25 | a(i) = i 26 | NEXT i 27 | 28 | ' _debug_puts2 sumup(a) : _debug_putnl 29 | 30 | ASSERT sumup (a) = 45 31 | 32 | -------------------------------------------------------------------------------- /tests/carray7.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' dyn array BYREF NULL argument test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | TYPE a_t AS INTEGER() 8 | 9 | DIM a AS a_t 10 | 11 | FUNCTION sumup (BYREF f AS a_t = NULL) AS INTEGER 12 | 13 | IF _ISNULL(f) THEN 14 | '_debug_puts "_ISNULL" : _debug_putnl 15 | RETURN 0 16 | END IF 17 | '_debug_puts "NOT _ISNULL" : _debug_putnl 18 | '_debug_puts "LBOUND(f)=" : _debug_puts2 LBOUND(f) : _debug_putnl 19 | '_debug_puts "UBOUND(f)=" : _debug_puts2 UBOUND(f) : _debug_putnl 20 | 21 | DIM s AS INTEGER = 0 22 | 23 | FOR i AS INTEGER = LBOUND(f) TO UBOUND(f) 24 | s = s + f(i) 25 | NEXT i 26 | 27 | RETURN s 28 | END FUNCTION 29 | 30 | '_debug_puts "before REDIM: " : _debug_putnl 31 | '_debug_puts "LBOUND(a)=" : _debug_puts2 LBOUND(a) : _debug_putnl 32 | '_debug_puts "UBOUND(a)=" : _debug_puts2 UBOUND(a) : _debug_putnl 33 | 34 | REDIM a(9) 35 | 36 | '_debug_puts "after REDIM: " : _debug_putnl 37 | '_debug_puts "LBOUND(a)=" : _debug_puts2 LBOUND(a) : _debug_putnl 38 | '_debug_puts "UBOUND(a)=" : _debug_puts2 UBOUND(a) : _debug_putnl 39 | 40 | FOR i AS INTEGER = LBOUND(a) TO UBOUND(a) 41 | a(i) = i 42 | NEXT i 43 | 44 | '_debug_puts2 sumup(a) : _debug_putnl 45 | 46 | ASSERT sumup (a) = 45 47 | 48 | '_debug_puts2 sumup : _debug_putnl 49 | ASSERT sumup = 0 50 | 51 | -------------------------------------------------------------------------------- /tests/carray8.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' dyn array REDIM PRESERVE test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | TYPE a_t AS INTEGER() 8 | 9 | DIM a AS a_t 10 | 11 | FUNCTION sumup (BYREF f AS a_t) AS INTEGER 12 | 13 | DIM s AS INTEGER = 0 14 | 15 | FOR i AS INTEGER = LBOUND(f) TO UBOUND(f) 16 | s = s + f(i) 17 | NEXT i 18 | 19 | RETURN s 20 | 21 | END FUNCTION 22 | 23 | REDIM a(9) 24 | 25 | FOR i AS INTEGER = LBOUND(a) TO UBOUND(a) 26 | a(i) = i 27 | NEXT i 28 | 29 | ASSERT sumup (a) = 45 30 | 31 | REDIM PRESERVE a(19) 32 | 33 | FOR i AS INTEGER = 10 TO 19 34 | a(i) = i 35 | NEXT i 36 | 37 | ASSERT sumup (a) = 190 38 | 39 | -------------------------------------------------------------------------------- /tests/carray9.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' dyn array ERASE test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER a( 9) 8 | DIM AS INTEGER b(10) 9 | DIM AS INTEGER c(11) 10 | 11 | ASSERT LBOUND(a) = 0 12 | ASSERT UBOUND(a) = 9 13 | 14 | ASSERT LBOUND(b) = 0 15 | ASSERT UBOUND(b) = 10 16 | 17 | ASSERT LBOUND(c) = 0 18 | ASSERT UBOUND(c) = 11 19 | 20 | ERASE a 21 | 22 | ASSERT LBOUND(a) = 0 23 | ASSERT UBOUND(a) = -1 24 | 25 | ASSERT LBOUND(b) = 0 26 | ASSERT UBOUND(b) = 10 27 | 28 | ASSERT LBOUND(c) = 0 29 | ASSERT UBOUND(c) = 11 30 | 31 | ERASE b, c 32 | 33 | ASSERT LBOUND(a) = 0 34 | ASSERT UBOUND(a) = -1 35 | 36 | ASSERT LBOUND(b) = 0 37 | ASSERT UBOUND(b) = -1 38 | 39 | ASSERT LBOUND(c) = 0 40 | ASSERT UBOUND(c) = -1 41 | 42 | -------------------------------------------------------------------------------- /tests/coll3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' Collections Test 3: CArrayList iterators 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | IMPORT Collections 8 | 9 | ' 10 | ' main 11 | ' 12 | 13 | DIM s AS STRING 14 | DIM i AS INTEGER 15 | 16 | ' 17 | ' try a simple list of integers 18 | ' 19 | 20 | DIM o1 AS CArrayList PTR = NEW CArrayList() 21 | 22 | o1->Add(42) 23 | 24 | FOR i = 1 TO 10 25 | o1->Add(i) 26 | NEXT i 27 | 28 | 'TRACE o1 29 | 'ASSERT o1->Count = 10 30 | 31 | ' 32 | ' enumerate 33 | ' 34 | 35 | DIM e AS IEnumerator PTR 36 | 37 | e = o1->GetEnumerator() 38 | 39 | 'TRACE "enumerating..." 40 | 41 | DIM AS INTEGER cnt=0, sum=0 42 | 43 | WHILE e->MoveNext() 44 | i = e->Current 45 | 'TRACE "element: "; i 46 | cnt=cnt+1 47 | sum=sum+i 48 | WEND 49 | 50 | 'TRACE "done. sum=";sum;", cnt=";cnt 51 | 52 | ASSERT cnt=11 53 | ASSERT sum=97 54 | 55 | ' 56 | ' test Reset 57 | ' 58 | 59 | e->Reset() 60 | 61 | cnt=0 : sum=0 62 | WHILE e->MoveNext() 63 | i = e->Current 64 | 'TRACE "element: "; i 65 | cnt=cnt+1 66 | sum=sum+i 67 | WEND 68 | 69 | 'TRACE "done. sum=";sum;", cnt=";cnt 70 | 71 | ASSERT cnt=11 72 | ASSERT sum=97 73 | 74 | -------------------------------------------------------------------------------- /tests/coll5.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' coll5: ExecList test part 2 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | IMPORT Collections 8 | 9 | DIM AS CExecList a = CExecList(NT_USER) 10 | 11 | ' 12 | ' test AddNode / GetNodeAt 13 | ' 14 | 15 | FOR i AS INTEGER = 0 TO 9 16 | a.AddNode(new CExecNode (i*i, i, 0, "hubba") ) 17 | NEXT i 18 | 19 | FOR i AS INTEGER = 0 TO 9 20 | DIM n AS CExecNode PTR = a.GetNodeAt(i) 21 | 'TRACE CAST(INTEGER, n->Value), n->Type, n->Name 22 | 23 | ' test node property getters 24 | 25 | ASSERT n->Type = i 26 | ASSERT n->Name = "hubba" 27 | ASSERT n->Value = i*i 28 | ASSERT n->Pri = 0 29 | 30 | ' test node property setters 31 | 32 | n->Value = i 33 | n->Type = i*i 34 | n->Pri = 0 35 | n->Name = "blubber" 36 | NEXT i 37 | 38 | ' check if node property setters worked 39 | 40 | FOR i AS INTEGER = 0 TO 9 41 | DIM n AS CExecNode PTR = a.GetNodeAt(i) 42 | 43 | ASSERT n->Type = i*i 44 | ASSERT n->Name = "blubber" 45 | ASSERT n->Value = i 46 | ASSERT n->Pri = 0 47 | NEXT i 48 | 49 | ' 50 | ' test Clone() 51 | ' 52 | 53 | DIM AS CExecList PTR b 54 | 55 | b = CAST (CExecList PTR, a.Clone()) 56 | 57 | ASSERT b->Count = 10 58 | 59 | FOR i AS INTEGER = 0 TO 9 60 | DIM n AS CExecNode PTR = b->GetNodeAt(i) 61 | 62 | ASSERT n->Type = i*i 63 | ASSERT n->Name = "blubber" 64 | ASSERT n->Value = i 65 | ASSERT n->Pri = 0 66 | NEXT i 67 | 68 | ' 69 | ' test RemoveAll 70 | ' 71 | 72 | b->RemoveAll() 73 | ASSERT b->Count=0 74 | 75 | -------------------------------------------------------------------------------- /tests/cond1.bas: -------------------------------------------------------------------------------- 1 | i& = 42 2 | 3 | l&=0 : u&=0 4 | 5 | FOR i& = 1 TO 42 6 | 7 | '_debug_puts "i&=" : _debug_putu4 i& : _debug_putnl 8 | 9 | IF i& > 23 THEN 10 | u& = u& + 1 11 | ' _debug_puts ">23 u=" : _debug_putu4 u& : _debug_puts ", l=" : _debug_putu4 l& : _debug_putnl 12 | ELSE 13 | l& = l& + 1 14 | ' _debug_puts "<=23 u=" : _debug_putu4 u& : _debug_puts ", l=" : _debug_putu4 l& : _debug_putnl 15 | END IF 16 | 17 | NEXT i& 18 | 19 | '_debug_puts "u&=" : _debug_putu4 u& : _debug_putnl 20 | '_debug_puts "l&=" : _debug_putu4 l& : _debug_putnl 21 | 22 | ASSERT u&=19 23 | ASSERT l&=23 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/cond3.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DIM AS INTEGER a, b, c 4 | 5 | a = 23 6 | b = 42 7 | 8 | c = TRUE 9 | 10 | ' PRINT ( a < b ) AND c 11 | 12 | ASSERT ( a < b ) AND c 13 | 14 | -------------------------------------------------------------------------------- /tests/cond4.bas: -------------------------------------------------------------------------------- 1 | ' test short circuit evaluation 2 | 3 | DIM SHARED cnt AS INTEGER = 0 4 | 5 | FUNCTION should%() 6 | cnt = cnt + 1 7 | should% = -1 8 | END FUNCTION 9 | 10 | FUNCTION shouldnt%() 11 | ASSERT FALSE 12 | shouldnt% = 0 13 | END FUNCTION 14 | 15 | i& = 42 16 | 17 | IF ( i& > 23 ) AND should%() THEN 18 | ASSERT TRUE 19 | ELSE 20 | ASSERT FALSE 21 | END IF 22 | 23 | IF ( i& < 23 ) AND shouldnt%() THEN 24 | ASSERT FALSE 25 | ELSE 26 | ASSERT TRUE 27 | END IF 28 | 29 | IF ( i& > 23 ) OR shouldnt%() THEN 30 | ASSERT TRUE 31 | ELSE 32 | ASSERT FALSE 33 | END IF 34 | 35 | IF ( i& < 23 ) OR should%() THEN 36 | ASSERT TRUE 37 | ELSE 38 | ASSERT FALSE 39 | END IF 40 | 41 | IF NOT (i& < 23) THEN 42 | ASSERT TRUE 43 | ELSE 44 | ASSERT FALSE 45 | END IF 46 | 47 | ASSERT cnt=2 48 | 49 | 50 | -------------------------------------------------------------------------------- /tests/cond6.bas: -------------------------------------------------------------------------------- 1 | ' **************************************************** 2 | ' ** test AND+OR+NOT (short circtuit) evaluation ** 3 | ' **************************************************** 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS BOOLEAN a=TRUE, b=TRUE, c=TRUE 8 | DIM AS BOOLEAN d=FALSE, e=FALSE 9 | 10 | DIM AS INTEGER i=1, j=2, k=3, l=4 11 | 12 | '' _debug_cls 13 | 14 | ' simple NOT cond 15 | 16 | IF NOT (ij) 25 | 26 | ' bitwise NOT 27 | 28 | '' _debug_puts2 NOT i : ' _debug_putnl 29 | 30 | ASSERT (NOT i) = -2 31 | 32 | ' NOT + AND 33 | 34 | ASSERT NOT (a AND e) 35 | 36 | ASSERT a AND (NOT e) 37 | 38 | ' NOT + OR 39 | 40 | ASSERT NOT (d OR e) 41 | ASSERT d OR (NOT e) 42 | 43 | ' AND + OR 44 | 45 | ASSERT ((i=10" 17 | t = t + i 18 | END IF 19 | 20 | NEXT i 21 | 22 | 'PRINT s, r, t 23 | 24 | ASSERT s=45 25 | ASSERT r=1180 26 | ASSERT t=3725 27 | 28 | 29 | -------------------------------------------------------------------------------- /tests/ctrl2.bas: -------------------------------------------------------------------------------- 1 | ' test SELECT CASE 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER s = 0, r = 0, t = 0, u=0 6 | 7 | FOR i AS INTEGER = 0 TO 99 8 | 9 | ' _debug_puts2(i) 10 | 11 | SELECT CASE i 12 | CASE 0 13 | ' _debug_puts " i == 0" 14 | s = s + i 15 | CASE 1,2,3,4,5,6,7,8,9 16 | ' _debug_puts " i in (1,2,3,4,5,6,7,8,9)" 17 | s = s + i 18 | CASE IS < 50 19 | ' _debug_puts "10 <= i <50" 20 | r = r + i 21 | CASE 50 TO 60 22 | ' _debug_puts " :50 TO 60" 23 | t = t + i 24 | CASE ELSE 25 | ' _debug_puts " ELSE" 26 | u = u + i 27 | END SELECT 28 | 29 | ' _debug_putnl 30 | 31 | NEXT i 32 | 33 | ' _debug_puts2(s) 34 | 35 | ASSERT s=45 36 | ASSERT r=1180 37 | ASSERT t=605 38 | ASSERT u=3120 39 | 40 | END 41 | 42 | ASSERT FALSE 43 | 44 | -------------------------------------------------------------------------------- /tests/ctrl3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test single line IF 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM s AS INTEGER = 0 8 | 9 | FOR i AS INTEGER = 1 TO 10 10 | 11 | s = s + i 12 | 13 | IF i>5 THEN EXIT FOR ELSE s = s + 1 14 | 15 | NEXT i 16 | 17 | ASSERT s=26 18 | 19 | -------------------------------------------------------------------------------- /tests/ctrl4.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' GOTO / IF GOTO line number test 3 | ' 4 | 5 | 10 i%=0 6 | 20 i%=i%+1 7 | 30 IF i% > 10 THEN 50 ELSE 40 8 | 40 GOTO 20 9 | 50 ASSERT i%=11 10 | 11 | -------------------------------------------------------------------------------- /tests/ctrl5.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' IF ... GOTO, labels test 3 | ' 4 | 5 | i%=0 6 | 7 | loopstart: 8 | 9 | i%=i%+1 10 | 11 | IF i%>10 GOTO fini 12 | 13 | IF i%<3 THEN GOTO loopstart 14 | 15 | i%=i%*2 16 | 17 | GOTO loopstart 18 | 19 | fini: 20 | 21 | ' _debug_puts2(i%) 22 | 23 | ASSERT i%=15 24 | 25 | -------------------------------------------------------------------------------- /tests/ctrl6.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' GOSUB test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM s AS INTEGER = 0 8 | 9 | GOSUB suba 10 | ASSERT s=23 11 | 12 | GOSUB subb 13 | GOSUB subb 14 | ASSERT s=25 15 | 16 | GOSUB suba 17 | ASSERT s=23 18 | 19 | SYSTEM 20 | 21 | suba: 22 | s = 23 23 | RETURN 24 | 25 | subb: 26 | s = s + 1 27 | RETURN 28 | 29 | -------------------------------------------------------------------------------- /tests/ctrl7.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test GOSUB <-> FOR loop interaction 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | CONST AS INTEGER arr_sz_z = 101 8 | 9 | DIM SHARED AS INTEGER x1 10 | 11 | CONST AS SINGLE camera_z=-400 12 | 13 | DIM AS INTEGER cnt=0 14 | 15 | FOR iz AS INTEGER = 0 TO arr_sz_z - 1 16 | 17 | GOSUB transform 18 | 19 | cnt = cnt + 1 20 | 21 | NEXT iz 22 | 23 | ' _debug_puts2 cnt : _debug_putnl 24 | 25 | ASSERT cnt=101 26 | 27 | END 28 | 29 | transform: 30 | 31 | DIM AS SINGLE tmp2 = 42 32 | DIM AS SINGLE xt2 = 42 33 | 34 | x1 = camera_z * xt2/tmp2 35 | 36 | RETURN 37 | 38 | -------------------------------------------------------------------------------- /tests/ctrl8.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' excerpt from 3dplot demo that creates a bit of register pressure 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER wx=640, wy=200 8 | DIM AS SINGLE trans_x=170, trans_y=80 9 | 10 | DIM SHARED AS SINGLE x, y, z : REM transform input 11 | DIM SHARED AS INTEGER x1, y1 : REM transform result -> draw 12 | 13 | CONST AS INTEGER arr_sz_x = 101 14 | CONST AS INTEGER arr_sz_z = 101 15 | 16 | ' precompute all f() values 17 | DIM AS INTEGER fncache_x1(STATIC arr_sz_x, arr_sz_z) 18 | DIM AS INTEGER fncache_y1(STATIC arr_sz_x, arr_sz_z) 19 | DIM AS SINGLE fncache_y (STATIC arr_sz_x, arr_sz_z) 20 | 21 | ' z = zb 22 | FOR iz AS INTEGER = 0 TO arr_sz_z - 1 23 | 24 | ' LOCATE 3,1 : PRINT "Precomputing fn values ";iz+1;"/";arr_sz_z;", please wait... " 25 | ' x = xa 26 | 27 | FOR ix AS INTEGER = 0 TO arr_sz_x - 1 28 | 29 | ' LOCATE 4,1 : PRINT ix,"/",arr_sz_x-1 30 | 31 | fncache_y(ix, iz) = y 32 | 33 | GOSUB transform 34 | 35 | fncache_x1(ix, iz) = x1 36 | 'fncache_y1(ix, iz) = y1 37 | 38 | NEXT ix 39 | 40 | ' z = z - ste_z 41 | 42 | NEXT iz 43 | 44 | END 45 | 46 | ' 47 | ' subroutines (not using SUBs/FUNCTIONs here as this serves as a GOSUB+RETURN test) 48 | ' 49 | 50 | ' 3D (x, y, z) -> 2D (x1, y1) coord transformation 51 | transform: 52 | 53 | ' 2D translation and scaling 54 | x1 = trans_x + x1 55 | y1 = trans_y - y1 56 | 57 | ' simple clipping 58 | IF x1<0 THEN x1=0 59 | IF x1>wx THEN x1=wx 60 | IF y1<0 THEN y1=0 61 | IF y1>wy THEN y1=wy 62 | 63 | 'PRINT "transform: ";x;y;z;" -> ";x1;y1 64 | RETURN 65 | 66 | -------------------------------------------------------------------------------- /tests/ctrl9.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' IF THEN/ELSE namespace test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM i AS INTEGER = 23 8 | 9 | IF i < 23 THEN 10 | 11 | DIM j AS INTEGER = 42 12 | 13 | ' _debug_puts2 j : _debug_putnl 14 | 15 | ASSERT j = 42 16 | 17 | ELSE 18 | 19 | DIM j AS INTEGER = 64 20 | 21 | ' _debug_puts2 j : _debug_putnl 22 | 23 | ASSERT j = 64 24 | 25 | END IF 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/dynmem1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' dynamic array allocation and access test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | ' DECLARE FUNCTION ALLOCATE (size AS ULONG, flags AS ULONG=0) AS VOID PTR 8 | 9 | CONST num AS INTEGER = 10 10 | 11 | DIM a AS UINTEGER PTR 12 | DIM i AS INTEGER 13 | 14 | ' _debug_puts2 ( num * SIZEOF (UINTEGER) ) 15 | a = ALLOCATE ( num * SIZEOF (UINTEGER) ) 16 | 17 | ASSERT a 18 | 19 | FOR i = 0 TO num-1 20 | ' _debug_puts2 i 21 | ' _debug_puts "::" 22 | a[i] = i 23 | NEXT i 24 | 25 | DIM s AS INTEGER = 0 26 | FOR i = 0 TO num-1 27 | s = s + a[i] 28 | NEXT i 29 | 30 | ' _debug_puts2 s 31 | ASSERT s = 45 32 | 33 | -------------------------------------------------------------------------------- /tests/exp1.bas: -------------------------------------------------------------------------------- 1 | ' test LET statement 2 | 3 | LET a% = 10 4 | LET b% = 32 5 | 6 | LET c% = a% + b% 7 | 8 | ASSERT c% = 42 9 | 10 | 11 | -------------------------------------------------------------------------------- /tests/exp2.bas: -------------------------------------------------------------------------------- 1 | ' test pointer CAST expressions 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM i AS INTEGER, ip AS INTEGER PTR 6 | DIM b AS BYTE, bp AS BYTE PTR 7 | 8 | i = &h2380 9 | b = CAST(BYTE, i) 10 | 11 | ip = @i 12 | bp = CAST(BYTE PTR, ip) 13 | 14 | ' PRINT i, b 15 | ' PRINT *ip, *bp 16 | 17 | ASSERT i = &h2380 18 | ASSERT b = -128 19 | ASSERT *ip = &h2380 20 | ASSERT *bp = &h23 : REM should be &h80 in little endian machines 21 | 22 | -------------------------------------------------------------------------------- /tests/exp3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' SUB pointer assignment 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED g AS INTEGER 8 | 9 | DIM AS SUB (BYVAL INTEGER) s1 10 | 11 | SUB mys (BYVAL i AS INTEGER) 12 | 13 | ' TRACE "mys called, i=";i 14 | 15 | g = i 16 | 17 | END SUB 18 | 19 | g = 23 20 | 21 | s1 = mys 22 | 23 | s1(42) 24 | 25 | ASSERT g=42 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/extcall2.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DECLARE EXTERN FUNCTION SPSin(BYVAL a AS SINGLE) LIB -36 MathTransBase (d0) 4 | 5 | ASSERT (INT(SPSin(3.1415)) = 0) 6 | 7 | -------------------------------------------------------------------------------- /tests/insights/debug/Makefile: -------------------------------------------------------------------------------- 1 | include ../../../config.mk 2 | 3 | EXAMPLE=foo 4 | # AQBFLAGS="-v" 5 | AQBFLAGS="" 6 | AQBLIBS=../../../src/lib 7 | # AQBRT=_aqb 8 | AQBRT=_brt 9 | ASMProsrctmp='foo.asm' 10 | ASMProsrc="${AMIGA_X}/foo.asm" 11 | 12 | .PHONY: run clean 13 | 14 | all: foo.hunk $(EMUDIR)/foo.hunk 15 | 16 | foo.hunk: foo.bas 17 | $(AQB) -L $(AQBLIBS) -d $(AQBRT) -A $(ASMProsrctmp) -o foo.hunk $(EXAMPLE).bas || exit 1 18 | 19 | $(EMUDIR)/foo.hunk: foo.hunk 20 | cp foo.hunk $(EMUDIR) 21 | 22 | run: $(EMUDIR)/foo.hunk 23 | $(LXA) -r $(LXA_ROM) "$(WORKDIR)/foo.hunk" 24 | 25 | debug: $(EMUDIR)/foo.hunk 26 | $(LXA) -b __aqb_main -r $(LXA_ROM) "$(WORKDIR)/foo.hunk" 27 | 28 | clean: 29 | rm -f "$(EMUDIR)/foo.hunk" 30 | rm -f aqb.log $(ASMProsrctmp) foo.hunk foo.s $(ASMProsrc) 31 | 32 | -------------------------------------------------------------------------------- /tests/insights/debug/debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | EXAMPLE=foo 4 | 5 | AQB=../../../target/x86_64-linux/bin/aqb 6 | AQBLIBS=../../../src/lib 7 | # AQBRT=_aqb 8 | AQBRT=_brt 9 | # AQBFLAGS="-v" 10 | AQBFLAGS="" 11 | OBJDUMP="/opt/amiga/bin/m68k-amigaos-objdump" 12 | 13 | ASMProsrctmp='foo.asm' 14 | ASMProsrc="${AMIGA_X}/foo.asm" 15 | OBJDUMPOUT='dump.txt' 16 | 17 | rm -f aqb.log ${ASMProsrctmp} foo.hunk foo.s ${ASMProsrc} 18 | 19 | echo ${AQB} ${AQBFLAGS} -L ${AQBLIBS} -d ${AQBRT} -A ${ASMProsrctmp} -o foo.hunk ${EXAMPLE}.bas || exit 1 20 | ${AQB} ${AQBFLAGS} -L ${AQBLIBS} -d ${AQBRT} -A ${ASMProsrctmp} -o foo.hunk ${EXAMPLE}.bas || exit 1 21 | 22 | cat ${AQBLIBS}/minbrt/prolog.asm ${ASMProsrctmp} ${AQBLIBS}/minbrt/minbrt.asm ${AQBLIBS}/minbrt/math.s >${ASMProsrc} 23 | 24 | #rm -f ${ASMProsrctmp} 25 | 26 | echo "${ASMProsrc} written." 27 | 28 | ${OBJDUMP} -x -d -r foo.hunk 2>&1 >${OBJDUMPOUT} 29 | 30 | echo "${OBJDUMPOUT} written." 31 | 32 | cp foo.hunk ${AMIGA_X} 33 | -------------------------------------------------------------------------------- /tests/insights/debug/foo.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | ' 4 | ' integer 5 | ' 6 | 7 | DIM f AS INTEGER = 42 8 | DIM g AS INTEGER = 23 9 | 10 | ASSERT f=42 11 | ASSERT g=23 12 | 13 | SWAP f, g 14 | 15 | TRACE f, g 16 | 17 | ASSERT f=23 18 | ASSERT g=42 19 | 20 | ' 21 | ' single 22 | ' 23 | 24 | DIM x AS SINGLE = 1.5 25 | DIM y AS SINGLE = 2.5 26 | 27 | ASSERT x = 1.5 28 | ASSERT y = 2.5 29 | 30 | SWAP x, y 31 | 32 | TRACE x, y 33 | 34 | ASSERT x = 2.5 35 | ASSERT y = 1.5 36 | 37 | ' 38 | ' string 39 | ' 40 | 41 | DIM s1 AS STRING = "HUBBA" 42 | DIM s2 AS STRING = "BOMMEL" 43 | 44 | assert s1 = "HUBBA" 45 | assert s2 = "BOMMEL" 46 | 47 | SWAP s1, s2 48 | 49 | TRACE s1, s2 50 | 51 | assert s1 = "BOMMEL" 52 | assert s2 = "HUBBA" 53 | 54 | -------------------------------------------------------------------------------- /tests/insights/footprint/clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # cleanup 5 | # 6 | 7 | rm -f foo.s foo.o foo foo.dump foo.asm foo_gnu.o foo_gnu.bin foo_gnu.dump foo.log foo_vasm.list aqb.log foo.S foo_vasm.dump foo_vasm.o 8 | rm -f /home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/*.uaem 9 | 10 | -------------------------------------------------------------------------------- /tests/insights/footprint/foo.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | IMPORT OSGadTools 4 | 5 | SUB foo (BYVAL str AS ULONG) 6 | TRACE "foo called, str=";str 7 | END SUB 8 | 9 | foo "hubba" 10 | 11 | -------------------------------------------------------------------------------- /tests/insights/footprint/footprint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | EXAMPLE=foo 4 | 5 | AQB=../../../target/x86_64-linux/bin/aqb 6 | AQBLIBS=../../../src/lib 7 | AQBRT=_aqb 8 | AQBFLAGS="-v" 9 | 10 | OBJDUMP_AMIGAOS='/home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-objdump' 11 | 12 | # 13 | # cleanup 14 | # 15 | 16 | rm -f foo.s foo.o foo foo.dump foo.asm foo_gnu.o foo_gnu.bin foo_gnu.dump foo.log foo_vasm.list aqb.log foo.S foo_vasm.dump foo_vasm.o 17 | rm -f /home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/*.uaem 18 | 19 | 20 | # 21 | # AQB 22 | # 23 | 24 | valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt \ 25 | ${AQB} ${AQBFLAGS} -L ${AQBLIBS} -d ${AQBRT} -a foo.s -B foo.S -p foo.o -o foo ${EXAMPLE}.bas 26 | 27 | # analyze object or load file produced by aqb's internal assembler/linker 28 | 29 | # /home/guenter/projects/amiga/amiga-gcc/bin/m68k-amigaos-objdump -x -d -r foo.o &>foo.dump 30 | -------------------------------------------------------------------------------- /tests/insights/link/clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # cleanup 5 | # 6 | 7 | rm -f foo.s foo.o foo foo.dump foo.asm foo_gnu.o foo_gnu.bin foo_gnu.dump foo.log foo_vasm.list aqb.log foo.S foo_vasm.dump foo_vasm.o 8 | rm -f /home/guenter/media/emu/amiga/FS-UAE/hdd/system/x/*.uaem 9 | 10 | -------------------------------------------------------------------------------- /tests/insights/link/foo.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 9 3 | ' 4 | ' constructor with all-optional arguments 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | TYPE myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER = 42) 14 | 15 | DECLARE SUB store (BYVAL i AS INTEGER) 16 | DECLARE FUNCTION retrieve () AS INTEGER 17 | 18 | END TYPE 19 | 20 | CONSTRUCTOR myc1 (BYVAL initValue AS INTEGER) 21 | ' TRACE "CONSTRUCTOR myc1 called, initValue="; initValue 22 | field1 = initValue 23 | END CONSTRUCTOR 24 | 25 | SUB myc1.store (BYVAL i AS INTEGER) 26 | field1 = i 27 | END SUB 28 | 29 | FUNCTION myc1.retrieve () AS INTEGER 30 | ' TRACE "myc1.retrieve: field1=";field1 31 | RETURN field1 32 | END FUNCTION 33 | 34 | ' 35 | ' main 36 | ' 37 | 38 | DIM o AS myc1 PTR = NEW myc1() 39 | 40 | ASSERT o->retrieve() = 42 41 | 42 | o->store(23) 43 | ASSERT o->retrieve() = 23 44 | 45 | -------------------------------------------------------------------------------- /tests/io1.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DIM AS BYTE B = -42 4 | DIM AS UBYTE ub = 200 5 | DIM AS INTEGER i = -32000 6 | DIM AS UINTEGER ui = 65000 7 | DIM AS LONG l = -100000 8 | DIM AS ULONG ul = 100000 9 | DIM AS SINGLE f = 3.1415 10 | DIM AS BOOLEAN myb = TRUE 11 | DIM AS STRING mys = "Hello World!" 12 | 13 | PRINT "io1 (PRINT): ",mys;B;23;ub;i;ui;l;ul;f;myb 14 | 15 | PRINT "io1 (WRITE): "; 16 | WRITE mys,B,23,ub,i,ui,l,ul,f,myb 17 | 18 | PRINT "Press RETURN..." 19 | 20 | DIM AS STRING answer 21 | 22 | INPUT answer 23 | 24 | PRINT "Thank you." 25 | 26 | -------------------------------------------------------------------------------- /tests/io2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test DATA, READ 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER i, j, k, l, m, n 8 | 9 | READ i, j, k, l, m, n 10 | 11 | ' _debug_puts "i=" : _debug_puts2 i : _debug_puts ", j=" : _debug_puts2 j : _debug_putnl 12 | ' _debug_puts "k=" : _debug_puts2 k : _debug_puts ", l=" : _debug_puts2 l : _debug_putnl 13 | ' _debug_puts "m=" : _debug_puts2 m : _debug_puts ", n=" : _debug_puts2 n : _debug_putnl 14 | 15 | ASSERT i=1 16 | ASSERT j=2 17 | ASSERT k=3 18 | ASSERT l=4 19 | ASSERT m=5 20 | ASSERT n=6 21 | 22 | DATA 1,2,3,4,5,6,7,8 23 | 24 | -------------------------------------------------------------------------------- /tests/io3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test DATA, READ for strings 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER i, j 8 | DIM AS STRING s, t 9 | 10 | READ i, s 11 | ASSERT i=42 12 | ASSERT s="foo" 13 | 14 | READ j, t 15 | ASSERT j=23 16 | ASSERT t="bar baz" 17 | 18 | ' _debug_puts "i=" : _debug_puts2 i : _debug_puts ", s=" : _debug_puts s : _debug_putnl 19 | 20 | 21 | DATA 42, foo 22 | DATA 23, "bar baz" 23 | 24 | -------------------------------------------------------------------------------- /tests/io4.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test RESTORE 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS INTEGER i, j, k 8 | 9 | READ i, j, k 10 | 11 | ' _debug_puts "i=" : _debug_puts2 i : _debug_puts ", j=" : _debug_puts2 j : _debug_putnl 12 | 13 | ASSERT i=1 14 | ASSERT j=2 15 | ASSERT k=3 16 | 17 | RESTORE 18 | READ i 19 | ' _debug_puts "i=" : _debug_puts2 i : _debug_putnl 20 | ASSERT i=1 21 | 22 | RESTORE dataset2 23 | 24 | READ i, j, k 25 | 26 | ' _debug_puts "i=" : _debug_puts2 i : _debug_puts ", j=" : _debug_puts2 j : _debug_putnl 27 | 28 | ASSERT i=10 29 | ASSERT j=11 30 | ASSERT k=12 31 | 32 | dataset1: 33 | 34 | DATA 1,2,3 35 | 36 | dataset2: 37 | 38 | DATA 10,11,12 39 | 40 | -------------------------------------------------------------------------------- /tests/io5.bas: -------------------------------------------------------------------------------- 1 | REM FILE i/o test 1 (print/input) 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS BYTE mybyte1, mybyte2 6 | DIM AS UBYTE myubyte1, myubyte2 7 | DIM AS INTEGER myint1, myint2 8 | DIM AS UINTEGER myuint1, myuint2 9 | DIM AS LONG mylong1, mylong2 10 | DIM AS ULONG myulong1, myulong2 11 | DIM AS SINGLE myf1, myf2 12 | DIM AS STRING mys1, mys2 13 | 14 | OPEN "hubba.txt" FOR OUTPUT AS #1 15 | 16 | READ mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 17 | READ myf1, mys1 18 | PRINT #1, mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 19 | PRINT #1, myf1, mys1 20 | REM TRACE mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 21 | REM TRACE myf1, mys1 22 | CLOSE 1 23 | 24 | OPEN "hubba.txt" FOR INPUT AS #3 25 | INPUT #3, mybyte2, myubyte2, myint2, myuint2, mylong2, myulong2 26 | REM TRACE "----> mybyte2=";mybyte2 27 | ASSERT mybyte1=mybyte2 28 | ASSERT myubyte1=myubyte2 29 | ASSERT myint1=myint2 30 | ASSERT myuint1=myuint2 31 | ASSERT mylong1=mylong2 32 | ASSERT myulong1=myulong2 33 | INPUT #3, myf2, mys2 34 | 'TRACE myf1, myf2, mys2 35 | ASSERT CINT(myf1*100)=CINT(myf2*100) 36 | ASSERT mys1=mys2 37 | CLOSE #3 38 | 39 | DATA 42, 255, 32000, 65000, -1000000, 2000000 40 | DATA 23.42, "hubba" 41 | 42 | -------------------------------------------------------------------------------- /tests/io6.bas: -------------------------------------------------------------------------------- 1 | REM FILE i/o test 2 (print/line input) 2 | 3 | OPTION EXPLICIT 4 | 5 | OPEN "hubba.txt" FOR OUTPUT AS #1 6 | FOR i AS INTEGER = 1 TO 3 7 | DIM l AS STRING 8 | READ l 9 | PRINT #1, l 10 | REM TRACE l 11 | NEXT i 12 | CLOSE 1 13 | 14 | RESTORE 15 | 16 | OPEN "hubba.txt" FOR INPUT AS #3 17 | WHILE NOT EOF(3) 18 | DIM AS STRING l1, l2 19 | READ l1 20 | LINE INPUT #3, l2 21 | REM TRACE l1, l2 22 | ASSERT l1=l2 23 | WEND 24 | CLOSE #3 25 | 26 | DATA "abc" 27 | DATA "abc abc 123" 28 | DATA "!@#$%^&*()_+ 1234567890/*-+" 29 | 30 | -------------------------------------------------------------------------------- /tests/io7.bas: -------------------------------------------------------------------------------- 1 | REM FILE i/o test 3 (write/input) 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS BYTE mybyte1, mybyte2 6 | DIM AS UBYTE myubyte1, myubyte2 7 | DIM AS INTEGER myint1, myint2 8 | DIM AS UINTEGER myuint1, myuint2 9 | DIM AS LONG mylong1, mylong2 10 | DIM AS ULONG myulong1, myulong2 11 | DIM AS SINGLE myf1, myf2 12 | DIM AS STRING mys1, mys2 13 | 14 | OPEN "hubba.txt" FOR OUTPUT AS #1 15 | 16 | READ mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 17 | READ myf1, mys1 18 | WRITE #1, mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 19 | WRITE #1, myf1, mys1 20 | REM TRACE mybyte1, myubyte1, myint1, myuint1, mylong1, myulong1 21 | REM TRACE myf1, mys1 22 | CLOSE 1 23 | 24 | OPEN "hubba.txt" FOR INPUT AS #3 25 | INPUT #3, mybyte2, myubyte2, myint2, myuint2, mylong2, myulong2 26 | REM TRACE "----> mybyte2=";mybyte2 27 | ASSERT mybyte1=mybyte2 28 | ASSERT myubyte1=myubyte2 29 | ASSERT myint1=myint2 30 | ASSERT myuint1=myuint2 31 | ASSERT mylong1=mylong2 32 | ASSERT myulong1=myulong2 33 | INPUT #3, myf2, mys2 34 | ASSERT CINT(myf1*100)=CINT(myf2*100) 35 | ASSERT mys1=mys2 36 | CLOSE #3 37 | 38 | DATA 42, 255, 32000, 65000, -1000000, 2000000 39 | DATA 23.42, "this is a test" 40 | 41 | -------------------------------------------------------------------------------- /tests/loop1.bas: -------------------------------------------------------------------------------- 1 | ' test while loop 2 | 3 | 4 | i% = 5 5 | j% = 0 6 | 7 | WHILE i% > 0 8 | i% = i% - 1 9 | j% = j% + 1 10 | ' PRINT i%, j% 11 | WEND 12 | 13 | ASSERT j%=5 14 | 15 | -------------------------------------------------------------------------------- /tests/loop10.bas: -------------------------------------------------------------------------------- 1 | ' test DO LOOP UNTIL 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM s AS INTEGER = 0 6 | 7 | DO 8 | 9 | s = s + 1 10 | 11 | LOOP UNTIL s=42 12 | 13 | ' PRINT s 14 | 15 | ASSERT s = 42 16 | 17 | -------------------------------------------------------------------------------- /tests/loop11.bas: -------------------------------------------------------------------------------- 1 | ' test local var decl inside WHILE...WEND 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER i=0, j=23, s=0 6 | 7 | WHILE i<3 8 | 9 | DIM AS INTEGER j=2 10 | 11 | i = i + 1 12 | s = s + j 13 | 14 | '_debug_puts "i=" : _debug_puts2 i : _debug_puts ", s=" : _debug_puts2 s : _debug_putnl 15 | 16 | WEND 17 | 18 | '_debug_puts "i=" : _debug_puts2 i : _debug_putnl 19 | ASSERT i=3 20 | ASSERT j=23 21 | ASSERT s=6 22 | 23 | -------------------------------------------------------------------------------- /tests/loop12.bas: -------------------------------------------------------------------------------- 1 | ' test local var decl inside FOR ... NEXT 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER j=23, s=0 6 | 7 | FOR i AS INTEGER = 0 TO 2 8 | 9 | DIM AS INTEGER j=2 10 | 11 | s = s + j 12 | 13 | '_debug_puts "i=" : _debug_puts2 i : _debug_puts ", s=" : _debug_puts2 s : _debug_putnl 14 | 15 | NEXT 16 | 17 | ASSERT j=23 18 | ASSERT s=6 19 | 20 | -------------------------------------------------------------------------------- /tests/loop13.bas: -------------------------------------------------------------------------------- 1 | ' test for loop step vs boundaries 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER arr_sz_x=101 6 | 7 | CONST AS INTEGER prec_x=5 8 | 9 | DIM AS INTEGER cnt=0 10 | 11 | FOR gx AS INTEGER = 0 TO arr_sz_x - prec_x STEP prec_x 12 | '_debug_puts "arr_sz_x=" : _debug_puts2 arr_sz_x : _debug_puts ", arr_sz_x - prec_x=" : _debug_puts2 arr_sz_x - prec_x : _debug_puts ", gx=" : _debug_puts2 gx : _debug_putnl 13 | cnt = cnt + 1 14 | NEXT gx 15 | 16 | '_debug_puts2 cnt : _debug_putnl 17 | 18 | ASSERT cnt=20 19 | -------------------------------------------------------------------------------- /tests/loop14.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DIM AS INTEGER s=0 4 | FOR i AS INTEGER = 12 TO 1 STEP -1 5 | s=s+1 6 | NEXT i 7 | 8 | ' _debug_puts2 s : _debug_putnl 9 | 10 | ASSERT s=12 11 | -------------------------------------------------------------------------------- /tests/loop15.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | DIM s AS INTEGER = 0 4 | 5 | FOR w AS SINGLE = 0 TO 3.14 STEP 0.1 6 | s = s + 1 7 | NEXT W 8 | 9 | ' _debug_puts2 s : _debug_putnl 10 | 11 | ASSERT s = 32 12 | 13 | -------------------------------------------------------------------------------- /tests/loop2.bas: -------------------------------------------------------------------------------- 1 | ' test EXIT 2 | 3 | i% = 42 4 | 5 | WHILE i% > 0 6 | i% = i% - 1 7 | 8 | IF i%<=32 THEN 9 | EXIT WHILE 10 | END IF 11 | WEND 12 | 13 | ASSERT i%=32 14 | 15 | -------------------------------------------------------------------------------- /tests/loop3.bas: -------------------------------------------------------------------------------- 1 | ' test EXIT in nested loops 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER i, j 6 | 7 | 8 | FOR i = 10 TO 100 9 | 10 | j = 1 11 | WHILE j < 100 12 | 13 | ' _debug_puts2(i) : _debug_puts(",") : _debug_puts2(j) 14 | j = j * 2 15 | 16 | IF i = j THEN 17 | EXIT WHILE, FOR 18 | END IF 19 | WEND 20 | NEXT i 21 | 22 | ' _debug_puts2(i) : _debug_puts(",") : _debug_puts2(j) 23 | 24 | ASSERT i=16 25 | ASSERT j=16 26 | 27 | -------------------------------------------------------------------------------- /tests/loop4.bas: -------------------------------------------------------------------------------- 1 | ' test for CONTINUE 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER i, s=0, l=0 6 | 7 | FOR i = 10 TO 100 8 | 9 | l = l + 1 10 | 11 | IF i < 50 THEN 12 | CONTINUE 13 | END IF 14 | 15 | s = s + 1 16 | NEXT i 17 | 18 | ' PRINT l, s 19 | 20 | ASSERT l=91 21 | ASSERT s=51 22 | 23 | -------------------------------------------------------------------------------- /tests/loop5.bas: -------------------------------------------------------------------------------- 1 | ' test while CONTINUE 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS INTEGER i=10, s=0, l=0 6 | 7 | WHILE i<=100 8 | 9 | i = i + 1 10 | l = l + 1 11 | 12 | IF i < 50 THEN 13 | CONTINUE 14 | END IF 15 | 16 | s = s + 1 17 | WEND 18 | 19 | 'PRINT l, s 20 | 21 | ASSERT l=91 22 | ASSERT s=52 23 | 24 | -------------------------------------------------------------------------------- /tests/loop6.bas: -------------------------------------------------------------------------------- 1 | ' test basic DO LOOP 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM s AS INTEGER = 0 6 | 7 | DO 8 | 9 | s = s + 1 10 | 11 | IF s > 41 THEN 12 | EXIT DO 13 | END IF 14 | 15 | LOOP 16 | 17 | ASSERT s = 42 18 | 19 | -------------------------------------------------------------------------------- /tests/loop7.bas: -------------------------------------------------------------------------------- 1 | ' test DO WHILE LOOP 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM s AS INTEGER = 0 6 | 7 | DO WHILE s<42 8 | 9 | s = s + 1 10 | 11 | LOOP 12 | 13 | ' PRINT s 14 | 15 | ASSERT s = 42 16 | 17 | -------------------------------------------------------------------------------- /tests/loop8.bas: -------------------------------------------------------------------------------- 1 | ' test DO UNTIL LOOP 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM s AS INTEGER = 0 6 | 7 | DO UNTIL s=42 8 | 9 | s = s + 1 10 | 11 | LOOP 12 | 13 | ' PRINT s 14 | 15 | ASSERT s = 42 16 | 17 | -------------------------------------------------------------------------------- /tests/loop9.bas: -------------------------------------------------------------------------------- 1 | ' test DO LOOP WHILE 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM s AS INTEGER = 41 6 | 7 | DO 8 | 9 | s = s + 1 10 | 11 | LOOP WHILE s<2 12 | 13 | ' PRINT s 14 | 15 | ASSERT s = 42 16 | 17 | -------------------------------------------------------------------------------- /tests/mod1/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | TESTNAME = mod1 4 | TESTDIR = $(EMUDIR)/aqb_tests/$(TESTNAME) 5 | 6 | AQBFLAGS = -L ../../src/lib -L $(TESTDIR) 7 | 8 | .PHONY: clean all dirs 9 | 10 | all: dirs $(TESTDIR)/mod1 11 | 12 | dirs: 13 | mkdir -p $(TESTDIR) 14 | 15 | clean: 16 | rm -rf $(TESTDIR) 17 | 18 | $(TESTDIR)/foo.sym: foo.bas 19 | $(AQB) $(AQBFLAGS) -a $(TESTDIR)/foo.s -s $(TESTDIR)/foo.sym foo.bas 20 | 21 | $(TESTDIR)/bar.sym: bar.bas 22 | $(AQB) $(AQBFLAGS) -a $(TESTDIR)/bar.s -s $(TESTDIR)/bar.sym bar.bas 23 | 24 | # foo.s: foo.sym 25 | # noop 26 | # 27 | # bar.sym: bar.bas 28 | # $(AQB) $(AQBFLAGS) -s bar.bas 29 | # 30 | # bar.s: bar.sym 31 | # noop 32 | 33 | $(TESTDIR)/foo.o $(TESTDIR)/bar.o $(TESTDIR)/mod1.o : $(TESTDIR)/%.o: $(TESTDIR)/%.s 34 | $(AS_AMIGAOS) $< -o $@ 35 | 36 | $(TESTDIR)/mod1.s: mod1.bas $(TESTDIR)/foo.sym $(TESTDIR)/bar.sym 37 | $(AQB) $(AQBFLAGS) -a $(TESTDIR)/mod1.s mod1.bas 38 | 39 | $(TESTDIR)/mod1: $(TESTDIR)/mod1.o $(TESTDIR)/foo.o $(TESTDIR)/bar.o 40 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $(TESTDIR)/mod1.o $(TESTDIR)/foo.o $(TESTDIR)/bar.o ../../src/lib/_aqb/_aqb.a ../../src/lib/_brt/_brt.a -o $(TESTDIR)/mod1 41 | 42 | 43 | -------------------------------------------------------------------------------- /tests/mod1/bar.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | IMPORT foo 4 | 5 | PUBLIC DIM SHARED v1 AS t1 6 | 7 | v1.i1 = 23 8 | v1.l1 = 123456 9 | 10 | FOR i AS INTEGER = 0 TO 99 11 | v1.a1(i) = i*i 12 | NEXT i 13 | 14 | DIM SHARED v2 AS INTEGER = 42 15 | 16 | v1.p1 = VARPTR(v2) 17 | 18 | -------------------------------------------------------------------------------- /tests/mod1/foo.bas: -------------------------------------------------------------------------------- 1 | OPTION PRIVATE 2 | OPTION EXPLICIT 3 | 4 | PUBLIC CONST c1 AS INTEGER = 64 5 | CONST c2 AS INTEGER = 64 : REM private 6 | 7 | PUBLIC TYPE t1 8 | AS INTEGER i1 9 | AS LONG l1 10 | AS INTEGER a1(100) 11 | AS INTEGER PTR p1 12 | END TYPE 13 | 14 | PUBLIC DIM SHARED foobares AS INTEGER = 0 15 | 16 | PUBLIC SUB foobar (x AS INTEGER = 23) 17 | 18 | ' _debug_puts "foobar called: x=" : _debug_puts2 x : _debug_putnl 19 | 20 | foobares = x 21 | 22 | END SUB 23 | 24 | PUBLIC DIM SHARED vfoo AS INTEGER 25 | 26 | vfoo = 42 27 | 28 | ' test extra syms 29 | 30 | PUBLIC SUB EXTRA SYMS (x AS INTEGER) 31 | 32 | foobares = x*2 33 | 34 | END SUB 35 | 36 | PUBLIC SUB EXTRA EXTRA SYMS (x AS INTEGER) 37 | 38 | foobares = x*x 39 | 40 | END SUB 41 | 42 | ' test proc ptrs 43 | 44 | PUBLIC DIM SHARED g_p AS SUB (INTEGER, INTEGER) = NULL 45 | 46 | PUBLIC SUB setfp (BYVAL p AS SUB (INTEGER, INTEGER)) 47 | g_p = p 48 | END SUB 49 | 50 | -------------------------------------------------------------------------------- /tests/mod1/mod1.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | IMPORT bar 4 | 5 | '_debug_puts2 foobares : _debug_putnl 6 | ASSERT foobares = 0 7 | 8 | foobar 9 | '_debug_puts2 foobares : _debug_putnl 10 | ASSERT foobares = 23 11 | 12 | foobar(42) 13 | ASSERT foobares = 42 14 | 15 | ' TRACE v1.i1, v1.l1 16 | ASSERT v1.i1 = 23 17 | ASSERT v1.l1 = 123456 18 | 19 | FOR i AS INTEGER = 0 TO 99 20 | ASSERT v1.a1(i) = i*i 21 | NEXT i 22 | 23 | ASSERT *v1.p1 = 42 24 | 25 | EXTRA SYMS 3 26 | ASSERT foobares = 6 27 | 28 | EXTRA EXTRA SYMS 3 29 | ASSERT foobares = 9 30 | 31 | ASSERT vfoo = 42 32 | 33 | REM test function pointers 34 | 35 | SUB q(x AS INTEGER, y AS INTEGER) 36 | vfoo = x*y 37 | END SUB 38 | 39 | SUB p(x AS INTEGER, y AS INTEGER) 40 | vfoo = x+y 41 | END SUB 42 | 43 | setfp q 44 | CALL g_p (6, 7) 45 | ASSERT vfoo = 42 46 | 47 | setfp p 48 | CALL g_p (16, 7) 49 | ASSERT vfoo = 23 50 | 51 | ASSERT MathTransBase <> NULL 52 | 53 | -------------------------------------------------------------------------------- /tests/mod2/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | .PHONY: clean all 4 | 5 | all: foo 6 | 7 | %.o : %.c 8 | $(CC_AMIGAOS) -c $(CFLAGS_AMIGAOS) -I../../src/lib/_brt $< -o $@ 9 | 10 | %.asm: %.c 11 | $(CC_AMIGAOS) -S $(CFLAGS_AMIGAOS) -I../../src/lib/_brt $< -o $@ 12 | 13 | foo : foo.bas mod2.a mod2.sym 14 | $(AQB) -L ../../src/lib -d _brt -o $@ foo.bas 15 | cp foo ${AMIGA_X}/ 16 | 17 | main : main.c mod2.a 18 | $(CC_AMIGAOS) $(CFLAGS_AMIGAOS) -I../../src/lib/_brt $< -o $@ mod2.a 19 | cp main ${AMIGA_X}/ 20 | 21 | mod2.sym : mod2.bas 22 | $(AQB) -L ../../src/lib -d _brt -s $@ mod2.bas 23 | # $(AQB) -L ../../src/lib -d _brt -I -s $@ mod2.bas 24 | 25 | mod2.a: mod2.o 26 | $(AR_AMIGAOS) -crs mod2.a $^ 27 | pushd .. && rm -f mod2.a && ln -s mod2/mod2.a && popd 28 | 29 | clean: 30 | rm -f *.o mod2.a *.sym *.asm aqb.log 31 | 32 | -------------------------------------------------------------------------------- /tests/mod2/foo.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | IMPORT mod2 4 | 5 | PRINT "Hello, World!" 6 | 7 | -------------------------------------------------------------------------------- /tests/mod2/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "mod2.h" 4 | 5 | int main(void) 6 | { 7 | printf("Hello, World!\n"); 8 | _mod2_init(); 9 | return 0; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /tests/mod2/mod2.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | OPTION PRIVATE 3 | 4 | PUBLIC DECLARE FUNCTION MOD2FN (BYVAL i AS INTEGER) AS INTEGER 5 | 6 | -------------------------------------------------------------------------------- /tests/mod2/mod2.c: -------------------------------------------------------------------------------- 1 | #include "mod2.h" 2 | 3 | #define ENABLE_DPRINTF 4 | #include "_brt.h" 5 | 6 | #include 7 | //#include 8 | //#include 9 | //#include 10 | 11 | //#include 12 | //#include 13 | //#include 14 | //#include 15 | // 16 | //#include 17 | //#include 18 | // 19 | //#include 20 | //#include 21 | 22 | //#include 23 | //#include 24 | 25 | mod2_t _g_m2_1[MOD2_NUM]; 26 | mod2_t _g_m2_2[MOD2_NUM]; 27 | 28 | void _mod2_init(void) 29 | { 30 | for (int i=0; iul2; 34 | 35 | p->ul1 = 42; 36 | p->s = 43; 37 | *pUL2 = 0xdeadbeef; 38 | //DPRINTF("_g_m2_1[%d]: p=0x%08lx, pUL2=0x%08lx\n", i, p, pUL2); 39 | } 40 | for (int i=0; iul1, p->ul2); 44 | } 45 | } 46 | 47 | -------------------------------------------------------------------------------- /tests/mod2/mod2.h: -------------------------------------------------------------------------------- 1 | #ifndef HAVE_GADTOOLS_SUPPORT_H 2 | #define HAVE_GADTOOLS_SUPPORT_H 3 | 4 | #include 5 | 6 | #define MOD2_NUM 4 7 | 8 | typedef struct 9 | { 10 | ULONG ul1; 11 | SHORT s; 12 | ULONG ul2; 13 | } mod2_t; 14 | 15 | extern mod2_t _g_m2[MOD2_NUM]; 16 | 17 | void _mod2_init(void); 18 | 19 | #endif 20 | 21 | -------------------------------------------------------------------------------- /tests/oop1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 1 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | CLASS myc1 8 | 9 | field1 AS INTEGER 10 | 11 | DECLARE SUB store (o AS INTEGER) 12 | DECLARE FUNCTION retrieve () AS INTEGER 13 | 14 | END CLASS 15 | 16 | SUB myc1.store (i AS INTEGER) 17 | 18 | ' _debug_puts "store() called." : _debug_putnl 19 | 20 | this.field1 = i 21 | 22 | END SUB 23 | 24 | FUNCTION myc1.retrieve () AS INTEGER 25 | 26 | ' _debug_puts "retrieve() called." : _debug_putnl 27 | 28 | RETURN this.field1 29 | 30 | END FUNCTION 31 | 32 | ' 33 | ' main 34 | ' 35 | 36 | DIM o AS myc1 37 | 38 | o.store(42) 39 | DIM res AS INTEGER = o.retrieve() 40 | ' _debug_puts "retrieved:" : _debug_puts2 res : _debug_putnl 41 | ASSERT res = 42 42 | 43 | o.store(23) 44 | ASSERT o.retrieve() = 23 45 | 46 | -------------------------------------------------------------------------------- /tests/oop10.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 10 3 | ' 4 | ' virtual function call 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myb 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE VIRTUAL FUNCTION f1(BYVAL i AS INTEGER) AS INTEGER 14 | DECLARE VIRTUAL FUNCTION f2(BYVAL i AS INTEGER) AS INTEGER 15 | 16 | END CLASS 17 | 18 | FUNCTION myb.f1 (BYVAL i AS INTEGER) AS INTEGER 19 | field1 = i 20 | RETURN i+23 21 | END FUNCTION 22 | 23 | FUNCTION myb.f2 (BYVAL i AS INTEGER) AS INTEGER 24 | RETURN i+i 25 | END FUNCTION 26 | 27 | ' 28 | ' main 29 | ' 30 | 31 | DIM o1 AS myb PTR = NEW myb() 32 | 33 | ASSERT o1->f1(19) = 42 34 | ASSERT o1->f2(21) = 42 35 | 36 | -------------------------------------------------------------------------------- /tests/oop11.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 11 3 | ' 4 | ' virtual function override 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myb 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE VIRTUAL FUNCTION f1(BYVAL i AS INTEGER) AS INTEGER 14 | DECLARE VIRTUAL FUNCTION f2(BYVAL i AS INTEGER) AS INTEGER 15 | 16 | END CLASS 17 | 18 | FUNCTION myb.f1 (BYVAL i AS INTEGER) AS INTEGER 19 | field1 = i 20 | RETURN i+23 21 | END FUNCTION 22 | 23 | FUNCTION myb.f2 (BYVAL i AS INTEGER) AS INTEGER 24 | RETURN i+i 25 | END FUNCTION 26 | 27 | 28 | CLASS myc1 EXTENDS myb 29 | 30 | DECLARE VIRTUAL FUNCTION f1(BYVAL i AS INTEGER) AS INTEGER 31 | 32 | END CLASS 33 | 34 | FUNCTION myc1.f1 (BYVAL i AS INTEGER) AS INTEGER 35 | RETURN i*i 36 | END FUNCTION 37 | 38 | ' 39 | ' main 40 | ' 41 | 42 | DIM o1 AS myb PTR = NEW myb() 43 | DIM o2 AS myb PTR = NEW myc1() 44 | 45 | ' TRACE "testing o1..." 46 | 47 | ASSERT o1->f1(19) = 42 48 | ASSERT o1->f2(21) = 42 49 | 50 | ' TRACE "testing o2..." 51 | ASSERT o2->f1(19) = 361 52 | ASSERT o2->f2(21) = 42 53 | 54 | -------------------------------------------------------------------------------- /tests/oop12.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 12 3 | ' 4 | ' interfaces 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | INTERFACE i1 10 | 11 | DECLARE VIRTUAL SUB store (BYVAL i AS INTEGER) 12 | DECLARE VIRTUAL FUNCTION retrieve () AS INTEGER 13 | 14 | END INTERFACE 15 | 16 | CLASS myc1 IMPLEMENTS i1 17 | 18 | field1 AS INTEGER 19 | 20 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER) 21 | 22 | DECLARE VIRTUAL SUB store (BYVAL i AS INTEGER) 23 | DECLARE VIRTUAL FUNCTION retrieve () AS INTEGER 24 | 25 | 'DECLARE FUNCTION square() AS INTEGER 26 | 27 | END CLASS 28 | 29 | CONSTRUCTOR myc1 (BYVAL initValue AS INTEGER) 30 | field1 = initValue 31 | END CONSTRUCTOR 32 | 33 | SUB myc1.store (BYVAL i AS INTEGER) 34 | field1 = i 35 | END SUB 36 | 37 | FUNCTION myc1.retrieve() AS INTEGER 38 | RETURN field1 39 | END FUNCTION 40 | 41 | ' 42 | ' main 43 | ' 44 | 45 | ' create object, test functionality via object ptr 46 | 47 | DIM o AS myc1 PTR = NEW myc1(23) 48 | 49 | DIM i AS INTEGER 50 | 51 | i = o->retrieve() 52 | 'TRACE "i="; i 53 | ASSERT i = 23 54 | 55 | o->store(42) 56 | i = o->retrieve() 57 | 'TRACE "i="; i 58 | ASSERT i = 42 59 | 60 | ' now, convert o to interface ptr, test functionality by calling the intf procs 61 | 62 | DIM iptr AS i1 PTR = o 63 | 64 | i = iptr->retrieve() 65 | 'TRACE "i="; i 66 | ASSERT i = 42 67 | 68 | iptr->store(23) 69 | 70 | i = iptr->retrieve() 71 | 'TRACE "i="; i 72 | ASSERT i = 23 73 | 74 | ' finally, test via object ptr again 75 | 76 | ASSERT o->retrieve() = 23 77 | 78 | -------------------------------------------------------------------------------- /tests/oop16.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP test 16: virtual properties 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | CLASS myb 8 | 9 | field1 AS INTEGER 10 | 11 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER) 12 | 13 | DECLARE VIRTUAL PROPERTY Value AS INTEGER 14 | DECLARE VIRTUAL PROPERTY Value (BYVAL v AS INTEGER) 15 | 16 | END CLASS 17 | 18 | CONSTRUCTOR myb (BYVAL initValue AS INTEGER) 19 | field1 = initValue 20 | END CONSTRUCTOR 21 | 22 | PROPERTY myb.Value (BYVAL v AS INTEGER) 23 | field1 = v 24 | END SUB 25 | 26 | PROPERTY myb.Value() AS INTEGER 27 | RETURN field1 28 | END FUNCTION 29 | 30 | CLASS myc EXTENDS myb 31 | 32 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER) 33 | 34 | DECLARE VIRTUAL PROPERTY Value AS INTEGER 35 | DECLARE VIRTUAL PROPERTY Value (BYVAL v AS INTEGER) 36 | 37 | END CLASS 38 | 39 | CONSTRUCTOR myc (BYVAL initValue AS INTEGER) 40 | field1 = initValue 41 | END CONSTRUCTOR 42 | 43 | PROPERTY myc.Value (BYVAL v AS INTEGER) 44 | field1 = v+1 45 | END SUB 46 | 47 | PROPERTY myc.Value() AS INTEGER 48 | RETURN field1*field1 49 | END FUNCTION 50 | 51 | ' 52 | ' main 53 | ' 54 | 55 | DIM o1 AS myb PTR = NEW myb(23) 56 | 57 | DIM i AS INTEGER 58 | 59 | i = o1->Value 60 | 'TRACE i 61 | ASSERT i=23 62 | 63 | o1->Value=42 64 | 65 | i = o1->Value 66 | 'TRACE i 67 | ASSERT i=42 68 | 69 | DIM o2 AS myb PTR = NEW myc(23) 70 | 71 | i = o2->Value 72 | 'TRACE i 73 | ASSERT i=529 74 | 75 | o2->Value=41 76 | 77 | i = o2->Value 78 | 'TRACE i 79 | ASSERT i=1764 80 | 81 | -------------------------------------------------------------------------------- /tests/oop17.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP test 17: interface virtual properties 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | INTERFACE i1 8 | 9 | DECLARE VIRTUAL PROPERTY Value AS INTEGER 10 | DECLARE VIRTUAL PROPERTY Value (BYVAL v AS INTEGER) 11 | 12 | END INTERFACE 13 | 14 | INTERFACE i2 IMPLEMENTS i1 15 | 16 | DECLARE VIRTUAL FUNCTION Square() AS INTEGER 17 | 18 | END INTERFACE 19 | 20 | CLASS myb IMPLEMENTS i2 21 | 22 | field1 AS INTEGER 23 | 24 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER) 25 | 26 | DECLARE VIRTUAL PROPERTY Value AS INTEGER 27 | DECLARE VIRTUAL PROPERTY Value (BYVAL v AS INTEGER) 28 | 29 | DECLARE VIRTUAL FUNCTION Square() AS INTEGER 30 | 31 | END CLASS 32 | 33 | CONSTRUCTOR myb (BYVAL initValue AS INTEGER) 34 | field1 = initValue 35 | END CONSTRUCTOR 36 | 37 | PROPERTY myb.Value (BYVAL v AS INTEGER) 38 | field1 = v 39 | END SUB 40 | 41 | PROPERTY myb.Value() AS INTEGER 42 | RETURN field1 43 | END FUNCTION 44 | 45 | FUNCTION myb.Square() AS INTEGER 46 | RETURN field1 * field1 47 | END FUNCTION 48 | 49 | ' 50 | ' main 51 | ' 52 | 53 | DIM o1 AS myb PTR = NEW myb(23) 54 | 55 | DIM i AS INTEGER 56 | 57 | i = o1->Value 58 | 'TRACE i 59 | ASSERT i=23 60 | 61 | o1->Value=42 62 | 63 | i = o1->Value 64 | 'TRACE i 65 | ASSERT i=42 66 | 67 | i = o1->Square() 68 | 'Trace i 69 | ASSERT i = 1764 70 | -------------------------------------------------------------------------------- /tests/oop2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 2 3 | ' 4 | ' test field access without using this-> 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE SUB store (o AS INTEGER) 14 | DECLARE FUNCTION retrieve () AS INTEGER 15 | 16 | END CLASS 17 | 18 | SUB myc1.store (i AS INTEGER) 19 | 20 | ' _debug_puts "store() called." : _debug_putnl 21 | 22 | field1 = i 23 | 24 | END SUB 25 | 26 | FUNCTION myc1.retrieve () AS INTEGER 27 | 28 | ' _debug_puts "retrieve() called." : _debug_putnl 29 | 30 | RETURN field1 31 | 32 | END FUNCTION 33 | 34 | ' 35 | ' main 36 | ' 37 | 38 | DIM o AS myc1 39 | 40 | o.store(42) 41 | DIM res AS INTEGER = o.retrieve() 42 | ' _debug_puts "retrieved:" : _debug_puts2 res : _debug_putnl 43 | 44 | ASSERT o.retrieve() = 42 45 | o.store(23) 46 | ASSERT o.retrieve() = 23 47 | 48 | -------------------------------------------------------------------------------- /tests/oop3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 3 3 | ' 4 | ' constructor 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (initValue AS INTEGER) 14 | 15 | DECLARE SUB store (i AS INTEGER) 16 | DECLARE FUNCTION retrieve () AS INTEGER 17 | 18 | END CLASS 19 | 20 | CONSTRUCTOR myc1 (initValue AS INTEGER) 21 | ' _debug_puts "CONSTRUCTOR called." : _debug_putnl 22 | field1 = initValue 23 | END CONSTRUCTOR 24 | 25 | SUB myc1.store (i AS INTEGER) 26 | 27 | ' _debug_puts "store() called." : _debug_putnl 28 | 29 | field1 = i 30 | 31 | END SUB 32 | 33 | FUNCTION myc1.retrieve () AS INTEGER 34 | 35 | ' _debug_puts "retrieve() called." : _debug_putnl 36 | 37 | RETURN field1 38 | 39 | END FUNCTION 40 | 41 | ' 42 | ' main 43 | ' 44 | 45 | DIM o AS myc1 = myc1(10) 46 | 47 | o.store(42) 48 | DIM res AS INTEGER = o.retrieve() 49 | ' _debug_puts "retrieved:" : _debug_puts2 res : _debug_putnl 50 | 51 | ASSERT o.retrieve() = 42 52 | o.store(23) 53 | ASSERT o.retrieve() = 23 54 | 55 | -------------------------------------------------------------------------------- /tests/oop4.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 4 3 | ' 4 | ' call methods without using this-> 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (initValue AS INTEGER) 14 | 15 | DECLARE SUB store (i AS INTEGER) 16 | DECLARE FUNCTION retrieve () AS INTEGER 17 | 18 | DECLARE FUNCTION square() AS INTEGER 19 | 20 | END CLASS 21 | 22 | CONSTRUCTOR myc1 (initValue AS INTEGER) 23 | ' _debug_puts "CONSTRUCTOR called." : _debug_putnl 24 | field1 = initValue 25 | END CONSTRUCTOR 26 | 27 | SUB myc1.store (i AS INTEGER) 28 | 29 | ' _debug_puts "store() called." : _debug_putnl 30 | 31 | field1 = i 32 | 33 | END SUB 34 | 35 | FUNCTION myc1.square () AS INTEGER 36 | RETURN retrieve()*retrieve() 37 | END FUNCTION 38 | 39 | FUNCTION myc1.retrieve () AS INTEGER 40 | 41 | ' _debug_puts "retrieve() called." : _debug_putnl 42 | 43 | RETURN field1 44 | 45 | END FUNCTION 46 | 47 | ' 48 | ' main 49 | ' 50 | 51 | DIM o AS myc1 = myc1(10) 52 | 53 | o.store(42) 54 | DIM res AS INTEGER = o.retrieve() 55 | ' _debug_puts "retrieved:" : _debug_puts2 res : _debug_putnl 56 | 57 | ASSERT o.retrieve() = 42 58 | o.store(23) 59 | ASSERT o.retrieve() = 23 60 | ASSERT o.square() = 529 61 | -------------------------------------------------------------------------------- /tests/oop5.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 5 3 | ' 4 | ' new operator 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (initValue AS INTEGER) 14 | 15 | DECLARE SUB store (i AS INTEGER) 16 | DECLARE FUNCTION retrieve () AS INTEGER 17 | 18 | DECLARE FUNCTION square() AS INTEGER 19 | 20 | END CLASS 21 | 22 | CONSTRUCTOR myc1 (initValue AS INTEGER) 23 | ' _debug_puts "CONSTRUCTOR called." : _debug_putnl 24 | field1 = initValue 25 | END CONSTRUCTOR 26 | 27 | SUB myc1.store (i AS INTEGER) 28 | 29 | ' _debug_puts "store() called." : _debug_putnl 30 | 31 | field1 = i 32 | 33 | END SUB 34 | 35 | FUNCTION myc1.square () AS INTEGER 36 | RETURN retrieve()*retrieve() 37 | END FUNCTION 38 | 39 | FUNCTION myc1.retrieve () AS INTEGER 40 | 41 | ' _debug_puts "retrieve() called." : _debug_putnl 42 | 43 | RETURN field1 44 | 45 | END FUNCTION 46 | 47 | ' 48 | ' main 49 | ' 50 | 51 | ' TRACE "1" 52 | 53 | DIM o AS myc1 PTR = NEW myc1(10) 54 | 55 | ' TRACE "2" 56 | o->store(42) 57 | 58 | ' TRACE "3" 59 | ASSERT o->retrieve() = 42 60 | 'TRACE "4" 61 | o->store(23) 62 | 'TRACE "5" 63 | ASSERT o->retrieve() = 23 64 | 'TRACE "6" 65 | ASSERT o->square() = 529 66 | 67 | -------------------------------------------------------------------------------- /tests/oop8.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 8 3 | ' 4 | ' PROPERTIES 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER) 14 | 15 | DECLARE PROPERTY p1 AS INTEGER 16 | DECLARE PROPERTY p1 (BYVAL f AS INTEGER) 17 | 18 | END CLASS 19 | 20 | CONSTRUCTOR myc1 (BYVAL initValue AS INTEGER) 21 | ' TRACE "CONSTRUCTOR myc1 called, initValue="; initValue 22 | field1 = initValue 23 | END CONSTRUCTOR 24 | 25 | PROPERTY myc1.p1 AS INTEGER 26 | return field1 27 | END PROPERTY 28 | 29 | PROPERTY myc1.p1 (BYVAL f AS INTEGER) 30 | field1 = f 31 | END PROPERTY 32 | 33 | ' 34 | ' main 35 | ' 36 | 37 | DIM o AS myc1 PTR = NEW myc1(23) 38 | 39 | ' test getter 40 | ASSERT o->p1 = 23 41 | 42 | o->p1 = 42 43 | ASSERT o->p1 = 42 44 | 45 | -------------------------------------------------------------------------------- /tests/oop9.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' OOP Test 9 3 | ' 4 | ' constructor with all-optional arguments 5 | ' 6 | 7 | OPTION EXPLICIT 8 | 9 | CLASS myc1 10 | 11 | field1 AS INTEGER 12 | 13 | DECLARE CONSTRUCTOR (BYVAL initValue AS INTEGER = 42) 14 | 15 | DECLARE SUB store (BYVAL i AS INTEGER) 16 | DECLARE FUNCTION retrieve () AS INTEGER 17 | 18 | END CLASS 19 | 20 | CONSTRUCTOR myc1 (BYVAL initValue AS INTEGER) 21 | ' TRACE "CONSTRUCTOR myc1 called, this="; @this; ", initValue="; initValue 22 | field1 = initValue 23 | END CONSTRUCTOR 24 | 25 | SUB myc1.store (BYVAL i AS INTEGER) 26 | field1 = i 27 | END SUB 28 | 29 | FUNCTION myc1.retrieve () AS INTEGER 30 | ' TRACE "myc1.retrieve: field1=";field1 31 | RETURN field1 32 | END FUNCTION 33 | 34 | ' 35 | ' main 36 | ' 37 | 38 | DIM o AS myc1 PTR = NEW myc1() 39 | 40 | ' TRACE o->retrieve() 41 | 42 | ASSERT o->retrieve() = 42 43 | 44 | o->store(23) 45 | ASSERT o->retrieve() = 23 46 | 47 | -------------------------------------------------------------------------------- /tests/opbool1.bas: -------------------------------------------------------------------------------- 1 | 2 | DIM AS BOOLEAN a, b 3 | 4 | CONST AS BOOLEAN ac=TRUE, bc=FALSE 5 | 6 | a = TRUE 7 | b = FALSE 8 | 9 | ' logical operators 10 | ' CG_xor, CG_eqv, CG_imp, CG_not, CG_and, CG_or, 11 | 12 | ASSERT a XOR b 13 | ASSERT ( a XOR a ) = FALSE 14 | ASSERT a XOR FALSE 15 | ASSERT ( a EQV b ) = FALSE 16 | ASSERT b EQV b 17 | ASSERT a EQV TRUE 18 | ASSERT b IMP a 19 | ASSERT ( a IMP b ) = FALSE 20 | ASSERT b IMP TRUE 21 | ASSERT ( NOT a ) = FALSE 22 | ASSERT NOT b 23 | ASSERT NOT FALSE 24 | ASSERT a AND a 25 | ASSERT (a AND b ) = FALSE 26 | ASSERT a AND TRUE 27 | ASSERT (b AND FALSE) = FALSE 28 | ASSERT a OR b 29 | ASSERT NOT (b OR b) 30 | ASSERT NOT (b OR FALSE) 31 | ASSERT b OR TRUE 32 | ASSERT a OR TRUE 33 | 34 | ' same with constants 35 | 36 | ASSERT ac XOR b 37 | ASSERT a XOR bc 38 | ASSERT ac XOR bc 39 | ASSERT ( ac EQV b ) = FALSE 40 | ASSERT ( a EQV bc ) = FALSE 41 | ASSERT ( ac EQV bc ) = FALSE 42 | ASSERT bc IMP a 43 | ASSERT b IMP ac 44 | ASSERT bc IMP ac 45 | ASSERT ( NOT ac ) = FALSE 46 | ASSERT (ac AND b ) = FALSE 47 | ASSERT (a AND bc ) = FALSE 48 | ASSERT (ac AND bc ) = FALSE 49 | ASSERT ac OR b 50 | ASSERT a OR bc 51 | ASSERT ac OR bc 52 | 53 | ' relational operators 54 | 55 | ASSERT a <> B 56 | ASSERT a = a 57 | ASSERT NOT (a = b) 58 | ASSERT NOT (a <> a) 59 | 60 | ' conversion tests 61 | 62 | DIM i AS integer 63 | DIM f AS single 64 | DIM l AS long 65 | 66 | i = 42 67 | f = 1.0 68 | l = 23 69 | 70 | b = i 71 | ASSERT b 72 | b = f 73 | ASSERT b 74 | b = l 75 | ASSERT b 76 | 77 | i = 0 78 | f = 0.0 79 | l = 0 80 | 81 | b = i 82 | ASSERT NOT b 83 | b = f 84 | ASSERT NOT b 85 | b = l 86 | ASSERT NOT b 87 | -------------------------------------------------------------------------------- /tests/opbool2.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | 'PRINT "1" = "2" 4 | 'PRINT ("1" = "2") 5 | 6 | DIM B AS BOOLEAN 7 | B = ("23" = "24") 8 | 'TRACE B 9 | ASSERT NOT B 10 | B = ("42" = "42") 11 | 'TRACE B 12 | ASSERT B 13 | B = (42 = 42) 14 | 'TRACE B 15 | ASSERT B 16 | B = (23 = 42) 17 | 'TRACE B 18 | ASSERT NOT B 19 | B = ("23" <> "24") 20 | 'TRACE B 21 | ASSERT B 22 | B = ("42" <> "42") 23 | 'TRACE B 24 | ASSERT NOT B 25 | B = (42 <> 42) 26 | 'TRACE B 27 | ASSERT NOT B 28 | B = (23 <> 42) 29 | 'TRACE B 30 | ASSERT B 31 | 32 | IF ("42" <> "42") THEN 33 | 'TRACE "'42' <> '42' gives wrong result!" 34 | ASSERT FALSE 35 | ELSE 36 | 'TRACE "'42' <> '42' gives right result!" 37 | ASSERT TRUE 38 | END IF 39 | IF ("23" = "42") THEN 40 | 'TRACE "'23' = '42' gives wrong result!" 41 | ASSERT FALSE 42 | ELSE 43 | 'TRACE "'23' = '42' gives right result!" 44 | ASSERT TRUE 45 | END IF 46 | 47 | -------------------------------------------------------------------------------- /tests/opsingle2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test power function, fix for #50 3 | ' 4 | 5 | DIM AS SINGLE s1, s2, z 6 | s1 = -2 7 | s2 = 3 8 | 9 | 'TRACE "-2 ^ 3", -2 ^ 3, -s1 ^ 3, -2 ^ s2, s1 ^ s2 10 | 11 | z = -2^3 12 | 13 | 'TRACE "-2^3="; z 14 | 'TRACE INT(z) 15 | ASSERT INT(z) = -8 16 | 17 | z = s1^3 18 | 'TRACE "s1^3="; z 19 | ASSERT INT(z) = -8 20 | 21 | z = -2 ^ s2 22 | 'TRACE "-2^s2="; z 23 | ASSERT INT(z) = -8 24 | 25 | z = s1 ^ s2 26 | 'TRACE "s1^s2="; z 27 | ASSERT INT(z) = -8 28 | 29 | z = -2 * -2 * -2 30 | 'TRACE "-2 * -2 * -2 = "; z 31 | ASSERT INT(z) = -8 32 | 33 | z = s1 * s1 * s1 34 | 'TRACE "s1 * s1 * s1 = "; z 35 | ASSERT INT(z) = -8 36 | 37 | 38 | -------------------------------------------------------------------------------- /tests/sarray1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' some simple tests for heap array access and assignment 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM a%(STATIC 100) 8 | 9 | a%(1) = 42 10 | a%(0) = 23 11 | 12 | ' _debug_puts2 LBOUND(a%) : _debug_putnl 13 | ASSERT LBOUND(a% ) = 0 14 | ASSERT LBOUND(a%, 0) = 1 15 | ASSERT LBOUND(a%, 2) = 0 16 | 17 | ' _debug_puts2 UBOUND(a%) : _debug_putnl 18 | ASSERT UBOUND(a% ) = 100 19 | ASSERT UBOUND(a%, 1) = 100 20 | ASSERT UBOUND(a%, 0) = 1 21 | 22 | 23 | ASSERT a%(1) = 42 24 | ASSERT a%(0) = 23 25 | 26 | FOR i AS INTEGER = 0 to 99 27 | a%(i) = i 28 | NEXT i 29 | 30 | FOR i AS INTEGER = 0 to 99 31 | ASSERT a%(i) = i 32 | NEXT i 33 | 34 | -------------------------------------------------------------------------------- /tests/sarray2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' whole array assignment on heap test 3 | ' 4 | 5 | DIM a%(STATIC 100) 6 | DIM b%(STATIC 100) 7 | 8 | FOR i% = 0 to 99 9 | a%(i%) = i% 10 | b%(i%) = i% * i% 11 | NEXT i% 12 | 13 | FOR i% = 0 to 99 14 | ASSERT a%(i%) = i% 15 | NEXT i% 16 | 17 | a% = b% 18 | 19 | FOR i% = 0 to 99 20 | ASSERT a%(i%) = i%*i% 21 | NEXT i% 22 | 23 | -------------------------------------------------------------------------------- /tests/sarray3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' some simple tests for frame array access and assignment 3 | ' 4 | 5 | SUB foo () 6 | 7 | DIM a%(STATIC 100) 8 | 9 | a%(1) = 42 10 | 11 | ' PRINT a%(1) 12 | 13 | a%(0) = 23 14 | 15 | ' PRINT a%(0), a%(1) 16 | 17 | ASSERT a%(1) = 42 18 | ASSERT a%(0) = 23 19 | 20 | FOR i% = 0 to 99 21 | a%(i%) = i% 22 | NEXT i% 23 | 24 | FOR i% = 0 to 99 25 | ASSERT a%(i%) = i% 26 | ' PRINT a%(i%) 27 | NEXT i% 28 | 29 | END SUB 30 | 31 | foo 32 | -------------------------------------------------------------------------------- /tests/sarray4.bas: -------------------------------------------------------------------------------- 1 | 2 | ' 3 | ' pointer array-like access test 4 | ' 5 | 6 | DIM a(STATIC 10) AS INTEGER 7 | DIM pa AS INTEGER PTR 8 | 9 | pa = @a[0] 10 | 11 | ' write via pointer, read via array 12 | 13 | FOR i% = 0 TO 9 14 | 'a[i%] = i% 15 | pa[i%] = i% 16 | NEXT i% 17 | 18 | s%=0 19 | FOR i% = 0 TO 9 20 | s% = s% + a[i%] 21 | NEXT i% 22 | 23 | ASSERT s%=45 24 | 25 | ' write via array, read via pointer 26 | 27 | FOR i% = 0 TO 9 28 | a[i%] = i% 29 | NEXT i% 30 | 31 | s%=0 32 | FOR i% = 0 TO 9 33 | s% = s% + pa[i%] 34 | NEXT i% 35 | 36 | ASSERT s%=45 37 | 38 | 39 | -------------------------------------------------------------------------------- /tests/sarray5.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' two-dim static array test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | ' DIM AS INTEGER a(9, 1) 8 | ' a(0,0)=1 9 | ' 'a(0,1)=1 10 | ' 'a(9,0)=2 11 | ' 'a(9,1)=3 12 | 13 | 14 | 15 | DIM AS INTEGER a(STATIC 9, 1), b(STATIC 9, 1) 16 | 17 | FOR i AS INTEGER = 0 TO 9 18 | a(i, 0) = i 19 | a(i, 1) = 42 20 | b(i, 0) = 23 21 | b(i, 1) = i 22 | NEXT i 23 | 24 | FOR i AS INTEGER = 0 TO 9 25 | ' _debug_puts2 a(i, 0) 26 | ' _debug_puts2 a(i, 1) 27 | ' _debug_puts2 b(i, 0) 28 | ' _debug_puts2 b(i, 1) 29 | ASSERT a(i, 0) = i 30 | ASSERT a(i, 1) = 42 31 | ASSERT b(i, 0) = 23 32 | ASSERT b(i, 1) = i 33 | NEXT i 34 | 35 | -------------------------------------------------------------------------------- /tests/sarray6.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' passing static arrays to subprograms 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | TYPE a_t AS INTEGER (STATIC 9) 8 | 9 | DIM AS a_t a 10 | 11 | FUNCTION sumup (f AS a_t) AS INTEGER 12 | 13 | DIM s AS INTEGER = 0 14 | 15 | FOR i AS INTEGER = LBOUND(f) TO UBOUND(f) 16 | s = s + f(i) 17 | ' _debug_puts "sumup i=" : _debug_puts2 i : _debug_puts " -> f(i)=" :_debug_puts2 f(i) : _debug_puts ", s=" : _debug_puts2 s : _debug_putnl 18 | NEXT i 19 | 20 | RETURN s 21 | 22 | END FUNCTION 23 | 24 | FOR i AS INTEGER = LBOUND(a) TO UBOUND(a) 25 | a(i) = i 26 | '_debug_puts2 i : _debug_puts " -> " :_debug_puts2 i : _debug_putnl 27 | NEXT i 28 | 29 | ' _debug_puts2 sumup(a) : _debug_putnl 30 | 31 | ASSERT sumup (a) = 45 32 | 33 | -------------------------------------------------------------------------------- /tests/scopes1.bas: -------------------------------------------------------------------------------- 1 | 2 | i = 42 3 | 4 | SUB foo 5 | i = 23 6 | ASSERT i=23 7 | END SUB 8 | 9 | foo 10 | 11 | ASSERT i=42 12 | 13 | -------------------------------------------------------------------------------- /tests/scopes2.bas: -------------------------------------------------------------------------------- 1 | DIM SHARED i 2 | 3 | i = 42 4 | 5 | SUB foo 6 | i = 23 7 | ASSERT i=23 8 | END SUB 9 | 10 | foo 11 | 12 | ASSERT i=23 13 | 14 | -------------------------------------------------------------------------------- /tests/scopes3.bas: -------------------------------------------------------------------------------- 1 | ' test local FOR loop var 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM i AS INTEGER = 23 6 | 7 | DIM j AS UINTEGER = 0 8 | 9 | FOR i AS UINTEGER = 1 TO 10 : REM uses local i 10 | j = j + i 11 | NEXT i 12 | 13 | ' PRINT i, j 14 | 15 | ASSERT j = 55 16 | ASSERT i = 23 : REM global i should have remained intact 17 | 18 | 19 | -------------------------------------------------------------------------------- /tests/string1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test string duplication 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | ' clib/exec_protos.h:VOID CopyMem( CONST APTR source, APTR dest, ULONG size ); 8 | DECLARE EXTERN SUB CopyMem (BYVAL src AS ANY PTR , BYVAL dst AS ANY PTR , BYVAL size AS ULONG) LIB -624 SysBase (a0, a1, d0) 9 | 10 | FUNCTION STRDUP (s AS STRING) AS STRING 11 | 12 | DIM l AS ULONG = LEN(s) 13 | DIM r AS STRING = ALLOCATE (l+1) 14 | 15 | CopyMem s, r, l+1 16 | 17 | STRDUP = r 18 | 19 | END FUNCTION 20 | 21 | DIM s AS STRING = "ABC" 22 | 23 | ' _debug_puts "s=" : _debug_puts s : _debug_putnl 24 | 25 | DIM r AS STRING 26 | 27 | r = STRDUP(s) 28 | 29 | ' _debug_puts "after STRDUP(s): r=" : _debug_puts r : _debug_puts ", s=" : _debug_puts s : _debug_putnl 30 | 31 | ASSERT r[0] = 65 32 | ASSERT r[1] = 66 33 | ASSERT r[2] = 67 34 | 35 | ASSERT s[0] = 65 36 | ASSERT s[1] = 66 37 | ASSERT s[2] = 67 38 | 39 | -------------------------------------------------------------------------------- /tests/string2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test STR$() pseudo-function 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM AS BYTE b = -42 8 | DIM AS UBYTE ub = 200 9 | DIM AS INTEGER i = -32000 10 | DIM AS UINTEGER ui = 65000 11 | DIM AS LONG l = -100000 12 | DIM AS ULONG ul = 100000 13 | DIM AS BOOLEAN myb = TRUE 14 | 15 | '_debug_puts STR$(b) : _debug_putnl 16 | '_debug_puts STR$(ub) : _debug_putnl 17 | '_debug_puts STR$(i) : _debug_putnl 18 | '_debug_puts STR$(ui) : _debug_putnl 19 | '_debug_puts STR$(l) : _debug_putnl 20 | '_debug_puts STR$(ul) : _debug_putnl 21 | '_debug_puts STR$(myb) : _debug_putnl 22 | 23 | ASSERT STR$(b) = "-42" 24 | ASSERT STR$(ub) = " 200" 25 | ASSERT STR$(i) = "-32000" 26 | ASSERT STR$(ui) = " 65000" 27 | ASSERT STR$(l) = "-100000" 28 | ASSERT STR$(ul) = " 100000" 29 | ASSERT STR$(myb) = "TRUE" 30 | 31 | -------------------------------------------------------------------------------- /tests/string4.bas: -------------------------------------------------------------------------------- 1 | REM string concatenation test 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS STRING a 6 | 7 | a = "hubba" 8 | 9 | a = a + " foobar" 10 | 11 | ' _debug_puts a : _debug_putnl 12 | 13 | assert a = "hubba foobar" 14 | 15 | -------------------------------------------------------------------------------- /tests/string5.bas: -------------------------------------------------------------------------------- 1 | REM MID$ tests 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS STRING s, s1, s2, s3 6 | 7 | s = "SundayMondayTuesday" 8 | 9 | s1 = MID$(s, 7, 6) 10 | REM TRACE s1 11 | ASSERT s1="Monday" 12 | 13 | s2 = MID$(s, 1, 6) 14 | REM TRACE s2 15 | ASSERT s2="Sunday" 16 | 17 | s3 = MID$(s, 13) 18 | REM TRACE s3 19 | ASSERT s3="Tuesday" 20 | 21 | -------------------------------------------------------------------------------- /tests/string6.bas: -------------------------------------------------------------------------------- 1 | REM test UCASE$, LCASE$, LEFT$, RIGHT$, INSTR 2 | 3 | OPTION EXPLICIT 4 | 5 | DIM AS STRING s="abcdABCD1234abcd" 6 | 7 | DIM AS STRING s1=UCASE$(s) 8 | 'TRACE s1 9 | ASSERT s1="ABCDABCD1234ABCD" 10 | 11 | DIM AS STRING s2=LCASE$(s) 12 | 'TRACE s2 13 | ASSERT s2="abcdabcd1234abcd" 14 | 15 | DIM AS STRING s3=LEFT$(s,4) 16 | 'TRACE s3 17 | ASSERT s3="abcd" 18 | 19 | DIM AS STRING s4=RIGHT$(s,8) 20 | 'TRACE s4 21 | ASSERT s4="1234abcd" 22 | 23 | ASSERT INSTR (,s,"ABCD")=5 24 | ASSERT INSTR (5,s,"abcd")=13 25 | ASSERT INSTR (,s,"xyz")=0 26 | 27 | -------------------------------------------------------------------------------- /tests/subtest1.bas: -------------------------------------------------------------------------------- 1 | 2 | SUB check1 ( b&, msg$ ) 3 | 4 | IF b& <> 1 THEN 5 | ASSERT FALSE 6 | END IF 7 | 8 | END SUB 9 | 10 | check1 1, "This shouldn't fail." 11 | 12 | -------------------------------------------------------------------------------- /tests/subtest10.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' amiga / ms basic syntax style function calls: multiple syms 3 | ' 4 | 5 | ' SUB WINDOW id [, Title [ , [ (x1,y1) - (x2,y2) ] [, [ wintype ] [, scrid] ] ] ] ] 6 | ' SUB WINDOW CLOSE 7 | ' SUB WINDOW OUTPUT id 8 | ' FUNCTION WINDOW(x) 9 | 10 | ' SUB ON BREAK CALL 11 | ' SUB ON COLLISION CALL 12 | ' SUB ON ERROR CALL 13 | ' SUB ON MENU CALL 14 | ' SUB ON MOUSE CALL 15 | ' SUB ON TIMER CALL 16 | 17 | ' FUNCTION MOUSE() 18 | ' SUB MOUSE ON 19 | ' SUB MOUSE OFF 20 | ' SUB MOUSE STOP 21 | 22 | 23 | DIM SHARED AS INTEGER sum 24 | 25 | SUB MTEST (id AS INTEGER) 26 | sum = id 27 | END SUB 28 | 29 | SUB MTEST FOO (id AS INTEGER) 30 | sum = 2 * id 31 | END SUB 32 | 33 | SUB MTEST FOO BAR (id AS INTEGER) 34 | sum = 3 * id 35 | END SUB 36 | 37 | FUNCTION MTEST (id AS INTEGER) AS INTEGER 38 | MTEST = 4 * id 39 | END FUNCTION 40 | 41 | 42 | sum = 0 43 | MTEST 23 44 | ASSERT sum = 23 45 | 46 | sum = 0 47 | MTEST FOO 23 48 | ASSERT sum = 46 49 | 50 | sum = 0 51 | MTEST FOO BAR 14 52 | ASSERT sum = 42 53 | 54 | ASSERT (MTEST(42)=168) 55 | 56 | 57 | -------------------------------------------------------------------------------- /tests/subtest11/Makefile: -------------------------------------------------------------------------------- 1 | include ../../config.mk 2 | 3 | TESTNAME = subtest11 4 | TESTDIR = $(EMUDIR)/aqb_tests/$(TESTNAME) 5 | TESTDIR_OPT = $(EMUDIR)/aqb_tests_opt/$(TESTNAME) 6 | 7 | AQBFLAGS = -L ../../src/lib -L $(TESTDIR) 8 | AQBFLAGS_OPT = -O -L ../../src/lib -L $(TESTDIR_OPT) 9 | 10 | .PHONY: clean all dirs 11 | 12 | all: dirs $(TESTDIR)/$(TESTNAME) $(TESTDIR_OPT)/$(TESTNAME) 13 | 14 | dirs: 15 | mkdir -p $(TESTDIR) 16 | mkdir -p $(TESTDIR_OPT) 17 | 18 | clean: 19 | rm -rf $(TESTDIR) 20 | rm -rf $(TESTDIR_OPT) 21 | 22 | $(TESTDIR)/$(TESTNAME).o: $(TESTDIR)/$(TESTNAME).s 23 | $(AS_AMIGAOS) $< -o $@ 24 | 25 | $(TESTDIR)/$(TESTNAME).s: $(TESTNAME).bas 26 | $(AQB) $(AQBFLAGS) -a $@ $(TESTNAME).bas 27 | 28 | $(TESTDIR)/$(TESTNAME): $(TESTDIR)/$(TESTNAME).o 29 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $(TESTDIR)/$(TESTNAME).o ../../src/lib/_brt/_brt.a ../../src/lib/_aqb/_aqb.a -o $(TESTDIR)/$(TESTNAME) 30 | 31 | $(TESTDIR_OPT)/$(TESTNAME).o: $(TESTDIR_OPT)/$(TESTNAME).s 32 | $(AS_AMIGAOS) $< -o $@ 33 | 34 | $(TESTDIR_OPT)/$(TESTNAME).s: $(TESTNAME).bas 35 | $(AQB) $(AQBFLAGS) -a $@ $(TESTNAME).bas 36 | 37 | $(TESTDIR_OPT)/$(TESTNAME): $(TESTDIR_OPT)/$(TESTNAME).o 38 | $(LD_AMIGAOS) ../../src/lib/_brt/startup.o $(TESTDIR_OPT)/$(TESTNAME).o ../../src/lib/_brt/_brt.a ../../src/lib/_aqb/_aqb.a -o $(TESTDIR_OPT)/$(TESTNAME) 39 | 40 | -------------------------------------------------------------------------------- /tests/subtest11/subtest11.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' ON EXIT CALL ... test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | SUB exitHandler 8 | 9 | PRINT "OK: exit handler called" 10 | 11 | END SUB 12 | 13 | ON EXIT CALL exitHandler 14 | 15 | PRINT "ON EXIT CALL test: next line should read 'OK: exit handler called'" 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/subtest12.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test error raising + handling 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED s AS INTEGER = 0 8 | 9 | SUB myerrhandler 10 | 11 | s = s + ERR 12 | 13 | ' PRINT "ERROR HANDLER CALLED, ERR=";ERR 14 | RESUME NEXT 15 | 16 | END SUB 17 | 18 | ON ERROR CALL myerrhandler 19 | 20 | ERROR 23 21 | ERROR 42 22 | 23 | ASSERT s = 65 24 | 25 | 26 | -------------------------------------------------------------------------------- /tests/subtest13.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test proc pointers: function with two args 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED g_p AS FUNCTION (INTEGER, INTEGER) AS INTEGER 8 | 9 | FUNCTION q(x AS INTEGER, y AS INTEGER) AS INTEGER 10 | q = x*y 11 | END FUNCTION 12 | 13 | FUNCTION p(x AS INTEGER, y AS INTEGER) AS INTEGER 14 | p = x+y 15 | END FUNCTION 16 | 17 | SUB setfp (BYVAL fp AS FUNCTION (INTEGER, INTEGER) AS INTEGER) 18 | g_p = fp 19 | END SUB 20 | 21 | '_debug_puts "1" : _debug_putnl 22 | 23 | setfp q 24 | '_debug_puts "2" : _debug_putnl 25 | ASSERT g_p (6, 7) = 42 26 | 27 | ' _debug_puts "3" : _debug_putnl 28 | setfp p 29 | ' _debug_puts "4" : _debug_putnl 30 | ASSERT g_p (16, 7) = 23 31 | 32 | -------------------------------------------------------------------------------- /tests/subtest14.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test proc pointers: function with no args 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED g_p AS FUNCTION AS INTEGER 8 | 9 | FUNCTION q() AS INTEGER 10 | q = 42 11 | END FUNCTION 12 | 13 | FUNCTION p() AS INTEGER 14 | p = 23 15 | END FUNCTION 16 | 17 | SUB setfp (BYVAL p AS FUNCTION AS INTEGER) 18 | g_p = p 19 | END SUB 20 | 21 | setfp q 22 | ASSERT g_p () = 42 23 | 24 | setfp p 25 | ASSERT g_p () = 23 26 | 27 | -------------------------------------------------------------------------------- /tests/subtest15.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test proc pointers: sub 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED g_p AS SUB (INTEGER, INTEGER) = NULL 8 | 9 | DIM SHARED s AS INTEGER 10 | 11 | SUB q(x AS INTEGER, y AS INTEGER) 12 | ' _debug_puts "SUB q" : _debug_putnl 13 | s = x*y 14 | END SUB 15 | 16 | SUB p(x AS INTEGER, y AS INTEGER) 17 | ' _debug_puts "SUB p" : _debug_putnl 18 | s = x+y 19 | END SUB 20 | 21 | SUB setfp (BYVAL p AS SUB (INTEGER, INTEGER)) 22 | ' _debug_puts "SUB setfp" : _debug_putnl 23 | g_p = p 24 | END SUB 25 | 26 | setfp q 27 | IF g_p <> NULL THEN 28 | CALL g_p (6, 7) 29 | ASSERT s = 42 30 | ELSE 31 | ASSERT FALSE 32 | END IF 33 | 34 | setfp p 35 | CALL g_p (16, 7) 36 | ASSERT s = 23 37 | 38 | -------------------------------------------------------------------------------- /tests/subtest16.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test exit sub statement 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM SHARED s AS INTEGER = 0 8 | 9 | SUB foo (x AS INTEGER) 10 | 11 | FOR i AS INTEGER = 1 TO x 12 | 13 | ' PRINT "i:";i,x 14 | ' PRINT i 15 | 16 | IF i>5 THEN 17 | EXIT SUB 18 | END IF 19 | 20 | s = s + i 21 | 22 | NEXT i 23 | 24 | END SUB 25 | 26 | foo (1) 27 | foo (2) 28 | foo (11) 29 | foo (12) 30 | 31 | ASSERT s=34 32 | 33 | -------------------------------------------------------------------------------- /tests/subtest17.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test exit function statement 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM r AS INTEGER = 0 8 | 9 | FUNCTION foo (x AS INTEGER) AS INTEGER 10 | 11 | DIM s AS INTEGER = 0 12 | 13 | FOR i AS INTEGER = 1 TO x 14 | 15 | ' PRINT "i:";i,x,s 16 | ' PRINT i 17 | 18 | IF i>5 THEN 19 | foo = s 20 | EXIT FUNCTION 21 | END IF 22 | 23 | s = s + i 24 | 25 | NEXT i 26 | 27 | foo = s 28 | 29 | END FUNCTION 30 | 31 | r = r + foo (1) 32 | r = r + foo (2) 33 | r = r + foo (11) 34 | r = r + foo (12) 35 | 36 | ASSERT r=34 37 | 38 | -------------------------------------------------------------------------------- /tests/subtest18.bas: -------------------------------------------------------------------------------- 1 | ' test RETURN 2 | 3 | OPTION EXPLICIT 4 | 5 | FUNCTION f (x AS INTEGER) AS INTEGER 6 | 7 | IF x>10 THEN 8 | RETURN 42 9 | END IF 10 | 11 | f = 23 12 | 13 | END FUNCTION 14 | 15 | ' PRINT f(11), f(5) 16 | 17 | ASSERT f(11)=42 18 | ASSERT f(5)=23 19 | 20 | -------------------------------------------------------------------------------- /tests/subtest19.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' test extra symbols 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | SUB s1 (_COORD(s AS BOOLEAN=FALSE, x1 AS INTEGER, y AS INTEGER)) 8 | 9 | ASSERT FALSE 10 | 11 | END SUB 12 | 13 | SUB s1 s2 (enabled AS BOOLEAN) 14 | 15 | ASSERT enabled 16 | 17 | END SUB 18 | 19 | s1 s2 TRUE 20 | 21 | -------------------------------------------------------------------------------- /tests/subtest2.bas: -------------------------------------------------------------------------------- 1 | 2 | REM test STATIC subprogram vars 3 | 4 | FUNCTION counter%() 5 | 6 | STATIC cnt% 7 | cnt% = cnt% + 1 8 | counter%=cnt% 9 | 10 | END FUNCTION 11 | 12 | FUNCTION counter2() AS INTEGER 13 | 14 | STATIC AS INTEGER cnt = 0 15 | cnt = cnt + 1 16 | 17 | ' PRINT cnt 18 | 19 | RETURN cnt 20 | 21 | END FUNCTION 22 | 23 | ASSERT(counter%()=1) 24 | ASSERT(counter%()=2) 25 | ASSERT(counter%()=3) 26 | ASSERT(counter%()=4) 27 | 28 | 29 | ASSERT(counter2()=1) 30 | ASSERT(counter2()=2) 31 | ASSERT(counter2()=3) 32 | ASSERT(counter2()=4) 33 | 34 | -------------------------------------------------------------------------------- /tests/subtest20.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | PUBLIC CONST AS INTEGER C1 = 32 4 | PUBLIC CONST AS INTEGER C2 = 64 5 | 6 | SUB MYW (id AS INTEGER, title AS STRING = NULL, _ 7 | _COORD2(s1 AS BOOLEAN=FALSE, x1 AS INTEGER=-1, y1 AS INTEGER=-1, s2 AS BOOLEAN=FALSE, x2 AS INTEGER=-1, y2 AS INTEGER=-1), _ 8 | flags AS INTEGER=15, scrid AS INTEGER = 0) 9 | 10 | ' _debug_puts2 id : _debug_putnl 11 | ' _debug_puts2 x1 : _debug_putnl 12 | ' _debug_puts2 y1 : _debug_putnl 13 | ' _debug_puts2 x2 : _debug_putnl 14 | ' _debug_puts2 y2 : _debug_putnl 15 | ' _debug_puts2 flags : _debug_putnl 16 | ' _debug_puts2 scrid : _debug_putnl 17 | 18 | ASSERT id=4 19 | ASSERT x1=-1 20 | ASSERT y1=-1 21 | ASSERT x2=-1 22 | ASSERT y2=-1 23 | ASSERT flags=96 24 | ASSERT scrid=2 25 | 26 | END SUB 27 | 28 | MYW 4,,,C1 OR C2,2 29 | 30 | -------------------------------------------------------------------------------- /tests/subtest21.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' byref / byval tests 3 | ' 4 | OPTION EXPLICIT 5 | 6 | SUB sref (BYREF i AS INTEGER) 7 | i = i + 1 8 | END SUB 9 | 10 | SUB sval (BYVAL i AS INTEGER) 11 | i = i + 1 12 | END SUB 13 | 14 | DIM j AS INTEGER = 0 15 | 16 | sref j 17 | ASSERT j=1 18 | 19 | sref j 20 | ASSERT j=2 21 | 22 | sval (j) 23 | ASSERT j=2 24 | 25 | sref j+1 26 | ASSERT j=2 27 | 28 | sref (j) 29 | ASSERT j=3 30 | 31 | -------------------------------------------------------------------------------- /tests/subtest22.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' mixing SUB / GOSUB 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | DIM g_i AS INTEGER = 42 8 | 9 | SUB foo 10 | 11 | GOSUB l1 12 | 13 | END SUB 14 | 15 | GOSUB l1 16 | 17 | foo 18 | 19 | END 20 | 21 | l1: 22 | '_debug_puts "g_i=" : _debug_puts2 g_i : _debug_putnl 23 | 24 | ASSERT g_i = 42 25 | 26 | RETURN 27 | 28 | -------------------------------------------------------------------------------- /tests/subtest23.bas: -------------------------------------------------------------------------------- 1 | ' register pressure test for linscan 2 | 3 | OPTION EXPLICIT 4 | 5 | SUB mysub (BYVAL b1 AS BOOLEAN, BYVAL x1 AS INTEGER, BYVAL y1 AS INTEGER, BYVAL b2 AS BOOLEAN, BYVAL x2 AS INTEGER, BYVAL y2 AS INTEGER, BYVAL a AS INTEGER, BYVAL b AS INTEGER) 6 | 7 | ' _debug_puts "b1=" : _debug_puts2 b1 8 | ' _debug_puts ", x1=" : _debug_puts2 x1 9 | ' _debug_puts ", y1=" : _debug_puts2 y1 10 | ' _debug_puts ", b2=" : _debug_puts2 b2 11 | ' _debug_puts ", x2=" : _debug_puts2 x2 12 | ' _debug_puts ", y2=" : _debug_puts2 y2 13 | ' _debug_puts ", a=" : _debug_puts2 a 14 | ' _debug_puts ", b=" : _debug_puts2 b 15 | ' _debug_putnl 16 | 17 | ASSERT b1 = -1 18 | ASSERT x1 = 1 19 | ASSERT y1 = 2 20 | ASSERT b2 = 0 21 | ASSERT x2 = 3 22 | ASSERT y2 = 4 23 | ASSERT a = 23 24 | ASSERT b = 42 25 | 26 | END SUB 27 | 28 | mysub TRUE, 1, 2, FALSE, 3, 4, 23, 42 29 | 30 | 31 | -------------------------------------------------------------------------------- /tests/subtest24.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | FUNCTION f (a AS INTEGER) AS INTEGER 4 | 5 | IF a > 20 THEN a=20 6 | 7 | a = a * 2 8 | RETURN a 9 | 10 | END FUNCTION 11 | 12 | ASSERT f(2)=4 13 | ASSERT f(22)=40 14 | 15 | -------------------------------------------------------------------------------- /tests/subtest25.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | SUB foo (BYVAL y AS INTEGER) 4 | 5 | '_debug_puts2 y : _debug_putnl 6 | 7 | ASSERT y=256 8 | 9 | END SUB 10 | 11 | CONST AS SINGLE y = 128 12 | 13 | foo (y+128) 14 | 15 | -------------------------------------------------------------------------------- /tests/subtest26.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | SUB bar (BYREF x AS INTEGER) 4 | 5 | x = 42 6 | 7 | END SUB 8 | 9 | SUB foo (BYREF y AS INTEGER) 10 | 11 | bar y 12 | 13 | END SUB 14 | 15 | DIM AS INTEGER i = 23 16 | 17 | foo i 18 | 19 | ' _debug_puts2 i : _debug_putnl 20 | 21 | ASSERT i = 42 22 | 23 | 24 | -------------------------------------------------------------------------------- /tests/subtest27.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | SUB foo (BYVAL i AS INTEGER, BYREF y AS INTEGER) 4 | 5 | y = i 6 | 7 | END SUB 8 | 9 | DIM AS INTEGER i = 23 10 | 11 | foo 42, i 12 | 13 | ' _debug_puts2 i : _debug_putnl 14 | 15 | ASSERT i = 42 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/subtest3.bas: -------------------------------------------------------------------------------- 1 | 2 | FUNCTION fibonacci% (BYVAL a% ) 3 | 4 | '_debug_puts2 a% : _debug_putnl 5 | 6 | IF a%=1 OR a%=2 THEN 7 | fibonacci% = 1 8 | ELSE 9 | fibonacci% = fibonacci%(a%-1) + fibonacci%(a%-2) 10 | END IF 11 | 12 | END FUNCTION 13 | 14 | ASSERT fibonacci%(1) = 1 15 | ASSERT fibonacci%(2) = 1 16 | f% = fibonacci%(23) 17 | ' _debug_puts2 f% : _debug_putnl 18 | ASSERT f% = 28657 19 | 20 | -------------------------------------------------------------------------------- /tests/subtest4.bas: -------------------------------------------------------------------------------- 1 | 2 | REM test STATIC subprograms 3 | 4 | FUNCTION counter%() STATIC 5 | 6 | cnt% = cnt% + 1 7 | counter%=cnt% 8 | 9 | END FUNCTION 10 | 11 | ASSERT(counter%()=1) 12 | ASSERT(counter%()=2) 13 | ASSERT(counter%()=3) 14 | ASSERT(counter%()=4) 15 | 16 | -------------------------------------------------------------------------------- /tests/subtest5.bas: -------------------------------------------------------------------------------- 1 | 2 | REM test optional arguments 3 | 4 | FUNCTION foo (a AS INTEGER, b AS INTEGER = 0, c AS INTEGER = 1) AS INTEGER 5 | 6 | foo = a + b + c 7 | 8 | END FUNCTION 9 | 10 | ASSERT(foo(1)=2) 11 | ' ASSERT(foo(1, 5)=7) 12 | ' ASSERT(foo(1, , 0)=1) 13 | 14 | -------------------------------------------------------------------------------- /tests/subtest6.bas: -------------------------------------------------------------------------------- 1 | 2 | REM test CALL syntax 3 | 4 | OPTION EXPLICIT 5 | 6 | DIM SHARED sum AS INTEGER = 0 7 | 8 | SUB foo (a AS INTEGER) 9 | 10 | sum = sum + a 11 | 12 | END SUB 13 | 14 | foo 11 15 | 16 | foo(23) 17 | 18 | CALL foo(8) 19 | 20 | ASSERT(sum=42) 21 | 22 | -------------------------------------------------------------------------------- /tests/subtest7.bas: -------------------------------------------------------------------------------- 1 | ' declare funtion ahead of use test 2 | 3 | DECLARE FUNCTION myfun%(a%) 4 | 5 | DECLARE SUB foo bar (a, b) 6 | 7 | ASSERT myfun%(42)=1764 8 | 9 | foo bar 1, 2 10 | 11 | FUNCTION myfun%(a%) 12 | myfun% = a% * a% 13 | END FUNCTION 14 | 15 | SUB foo bar (a, b) 16 | END SUB 17 | 18 | -------------------------------------------------------------------------------- /tests/subtest8.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' amiga / ms basic syntax: _COORD2 3 | 4 | ' used in: 5 | ' GET (x1,y1)-(x2,y2), array-name [(index[, index...])] 6 | ' OBJECT.CLIP (x1,y1)-(x2,y2) 7 | ' SCROLL (x1,y1)-(x2,y2), delta-x, delta-y 8 | ' LINE [[STEP] (x1,y1)] - [STEP] (x2,y2), [colour-id][,b[f]] 9 | 10 | DIM SHARED AS INTEGER sum 11 | 12 | SUB WTEST (id AS INTEGER, _COORD2(s1 AS BOOLEAN=FALSE, _ 13 | x1 AS INTEGER=-1, _ 14 | y1 AS INTEGER=-1, _ 15 | s2 AS BOOLEAN=FALSE, _ 16 | x2 AS INTEGER=-1, _ 17 | y2 AS INTEGER=-1)) 18 | 19 | ' PRINT s1, s2 20 | 21 | sum = id + x1 + y1 + x2 + y2 + s1 + s2 22 | 23 | END SUB 24 | 25 | sum = 0 26 | WTEST 1 27 | ASSERT sum = -3 28 | 29 | sum = 0 30 | WTEST 2, (0,0) - (100, 100) 31 | ASSERT sum = 202 32 | 33 | sum = 0 34 | WTEST 2, STEP (0,0) - (100, 100) 35 | ASSERT sum = 201 36 | 37 | sum = 0 38 | WTEST 2, (0,0) - STEP (100, 100) 39 | ASSERT sum = 201 40 | 41 | sum = 0 42 | WTEST 2, - STEP (100, 100) 43 | ASSERT sum = 199 44 | 45 | sum = 0 46 | WTEST 2, - (100, 100) 47 | ASSERT sum = 200 48 | 49 | -------------------------------------------------------------------------------- /tests/subtest9.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' amiga / ms basic syntax style function calls: _COORD 3 | ' 4 | 5 | ' used in: 6 | 7 | ' Area [STEP] (x, y) 8 | ' CIRCLE [STEP] (x, y) ,radius [,colour-id [,start, end [,aspect]]] 9 | ' PAINT [STEP] (x,y) [,paintColour-id] [,borderColour-id] 10 | ' POINT (x,y) 11 | ' PRESET [STEP] (x,y) [,colour-id] 12 | ' PSET [STEP] (x,y) [,colour-id] 13 | 14 | DIM SHARED AS INTEGER sum 15 | 16 | SUB PTEST (id AS INTEGER, _COORD(s1 AS BOOLEAN=FALSE, _ 17 | x1 AS INTEGER=-1, _ 18 | y1 AS INTEGER=-1)) 19 | 20 | ' PRINT s1, s2 21 | 22 | sum = id + x1 + y1 + s1 23 | 24 | END SUB 25 | 26 | sum = 0 27 | PTEST 1 28 | ' PRINT sum 29 | ASSERT sum = -1 30 | 31 | sum = 0 32 | PTEST 2, (23, 42) 33 | ' PRINT sum 34 | ASSERT sum = 67 35 | 36 | sum = 0 37 | PTEST 2, STEP (23, 42) 38 | ' PRINT sum 39 | ASSERT sum = 66 40 | 41 | -------------------------------------------------------------------------------- /tests/swap.bas: -------------------------------------------------------------------------------- 1 | OPTION EXPLICIT 2 | 3 | ' 4 | ' integer 5 | ' 6 | 7 | DIM f AS INTEGER = 42 8 | DIM g AS INTEGER = 23 9 | 10 | ASSERT f=42 11 | ASSERT g=23 12 | 13 | SWAP f, g 14 | 15 | 'TRACE f, g 16 | 17 | ASSERT f=23 18 | ASSERT g=42 19 | 20 | ' 21 | ' single 22 | ' 23 | 24 | DIM x AS SINGLE = 1.5 25 | DIM y AS SINGLE = 2.5 26 | 27 | ASSERT x = 1.5 28 | ASSERT y = 2.5 29 | 30 | SWAP x, y 31 | 32 | 'TRACE x, y 33 | 34 | ASSERT x = 2.5 35 | ASSERT y = 1.5 36 | 37 | ' 38 | ' string 39 | ' 40 | 41 | DIM s1 AS STRING = "HUBBA" 42 | DIM s2 AS STRING = "BOMMEL" 43 | 44 | assert s1 = "HUBBA" 45 | assert s2 = "BOMMEL" 46 | 47 | SWAP s1, s2 48 | 49 | 'TRACE s1, s2 50 | 51 | assert s1 = "BOMMEL" 52 | assert s2 = "HUBBA" 53 | 54 | -------------------------------------------------------------------------------- /tests/types1.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' whole array assignment in frame test 3 | ' 4 | 5 | SUB foo() 6 | 7 | DIM a%(STATIC 100) 8 | DIM b%(STATIC 100) 9 | 10 | FOR i% = 0 to 99 11 | a%(i%) = i% 12 | b%(i%) = i% * i% 13 | NEXT i% 14 | 15 | FOR i% = 0 to 99 16 | ASSERT a%(i%) = i% 17 | NEXT i% 18 | 19 | a% = b% 20 | 21 | FOR i% = 0 to 99 22 | ASSERT a%(i%) = i%*i% 23 | NEXT i% 24 | 25 | END SUB 26 | 27 | foo 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/types2.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' record type test 3 | ' 4 | 5 | TYPE t1 6 | f1 AS INTEGER 7 | AS LONG f2, f3 8 | END TYPE 9 | 10 | DIM v AS t1 11 | 12 | v.f1 = 23 13 | v.f2 = 100000 14 | v.f3 = 250000 15 | 16 | ASSERT v.f1 = 23 17 | ASSERT v.f2 = 100000 18 | ASSERT v.f3 = 250000 19 | 20 | -------------------------------------------------------------------------------- /tests/types3.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' pointer type test 3 | ' 4 | 5 | DIM v AS INTEGER PTR 6 | 7 | DIM i AS INTEGER 8 | DIM j AS INTEGER 9 | 10 | v = VARPTR(i) 11 | 12 | i = 42 13 | 14 | ASSERT i = 42 15 | ASSERT *v = 42 16 | 17 | *v = 23 18 | 19 | ASSERT i = 23 20 | ASSERT *v = 23 21 | 22 | v = @j 23 | j = 42 24 | 25 | ASSERT i = 23 26 | ASSERT j = 42 27 | ASSERT *v = 42 28 | 29 | -------------------------------------------------------------------------------- /tests/types4.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' UDT pointer test 3 | ' 4 | 5 | TYPE udt 6 | i% 7 | j AS INTEGER PTR 8 | l& 9 | AS LONG PTR p1, p2, p3 10 | END TYPE 11 | 12 | DIM u AS udt 13 | 14 | u.i% = 42 15 | u.j = @u.i% 16 | u.l& = 100000 17 | u.p1 = @u.l& 18 | u.p2 = @u.l& 19 | u.p3 = @u.l& 20 | 21 | ASSERT u.i% = 42 22 | ASSERT *u.j = 42 23 | 24 | ASSERT u.l& = 100000 25 | ASSERT *u.p1 = 100000 26 | ASSERT *u.p2 = 100000 27 | ASSERT *u.p3 = 100000 28 | 29 | u.i% = 23 30 | ASSERT u.i% = 23 31 | ASSERT *u.j = 23 32 | 33 | u.l& = 200000 34 | ASSERT u.l& = 200000 35 | ASSERT *u.p1 = 200000 36 | ASSERT *u.p2 = 200000 37 | ASSERT *u.p3 = 200000 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /tests/types5.bas: -------------------------------------------------------------------------------- 1 | 2 | ' 3 | ' string array-like access test 4 | ' 5 | 6 | DIM pa AS UBYTE PTR 7 | 8 | a$ = "ABCDE" 9 | 10 | pa = a$ 11 | 12 | ' read via pointer 13 | 14 | s%=0 15 | FOR i% = 0 TO 4 16 | s% = s% + pa[i%] 17 | NEXT i% 18 | 19 | ' PRINT s% 20 | 21 | ASSERT s%=335 22 | 23 | ' modify via pointer 24 | 25 | pa[0] = 65 26 | pa[1] = 65 27 | pa[2] = 65 28 | pa[3] = 65 29 | pa[4] = 65 30 | 31 | s%=0 32 | FOR i% = 0 TO 4 33 | 'PRINT i%, pa[i%] 34 | s% = s% + pa[i%] 35 | NEXT i% 36 | 37 | ' PRINT a$, s% 38 | 39 | ASSERT s%=325 40 | 41 | 42 | -------------------------------------------------------------------------------- /tests/types6.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' pointer access test 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | TYPE myudt 8 | AS INTEGER a, b 9 | AS myudt PTR n 10 | END TYPE 11 | 12 | DIM AS myudt PTR p 13 | DIM AS myudt u, v 14 | 15 | p = @u 16 | 17 | p->a = 23 18 | p->b = 42 19 | p->n = @v 20 | 21 | p->n->a = 42 22 | p->n->b = 23 23 | 24 | ASSERT p->a = 23 25 | ASSERT p->b = 42 26 | ASSERT p->n->a = 42 27 | ASSERT p->n->b = 23 28 | 29 | -------------------------------------------------------------------------------- /tests/types7.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' DEFINT / DEFSNG / DEFLNG / DEFSTR test 3 | ' 4 | 5 | DEFINT i 6 | DEFINT j-k, l-m 7 | 8 | DEFSNG a,b 9 | DEFLNG x,y 10 | 11 | DEFSTR s 12 | 13 | i = 23 14 | j = 5 15 | 16 | ASSERT i/j = 4 17 | 18 | a = 7 19 | b = 2 20 | 21 | ASSERT a/b = 3.5 22 | 23 | x = 100000 24 | y = 200000 25 | 26 | ASSERT x+y = 300000 27 | 28 | s = "abcd" 29 | 30 | ASSERT s="abcd" 31 | 32 | 33 | -------------------------------------------------------------------------------- /tests/var1.bas: -------------------------------------------------------------------------------- 1 | ' test external vars 2 | 3 | ASSERT DOSBase <> NULL 4 | 5 | ' PRINT intuitionbase 6 | 7 | -------------------------------------------------------------------------------- /tests/var2.bas: -------------------------------------------------------------------------------- 1 | ' test var initializers 2 | 3 | SUB foo () 4 | 5 | DIM n AS Integer = 20000 6 | DIM l AS Long = 200000 7 | 8 | ASSERT n = 20000 9 | ASSERT l = 200000 10 | 11 | END SUB 12 | 13 | 14 | DIM a AS Integer = 23 15 | DIM b AS Integer = 10000 16 | DIM c AS Long = 1000000 17 | 18 | ' PRINT a, b, c 19 | 20 | ASSERT a = 23 21 | ASSERT b = 10000 22 | ASSERT c = 1000000 23 | 24 | foo 25 | 26 | -------------------------------------------------------------------------------- /tutorial/BOBDemo1.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Create a BOB and display it 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT AnimSupport 7 | 8 | WINDOW 1, "BOB Demo" 9 | 10 | REM important: initialize the animation system first 11 | 12 | GELS INIT 13 | 14 | REM create a bitmap, draw into it and create the BOB 15 | 16 | DIM AS BITMAP_t PTR bm = NULL 17 | 18 | bm = BITMAP(32, 32, 2, TRUE) 19 | 20 | BITMAP OUTPUT bm 21 | 22 | LINE (0,0)-(31,31),2,B 23 | LINE (1,1)-(30,30),3,BF 24 | COLOR 1,,,DRMD_JAM1 : LOCATE XY (4,18) : PRINT "BOB" 25 | 26 | WINDOW OUTPUT 1 27 | 28 | DIM AS BOB_t PTR gbob 29 | 30 | gbob = BOB (bm) 31 | 32 | BOB SHOW gbob 33 | 34 | REM draw something on the background 35 | 36 | COLOR 3 37 | 38 | FOR x AS INTEGER = 10 TO 630 STEP 3 39 | LINE (x, 10)-(320,190) 40 | NEXT x 41 | 42 | COLOR 1 43 | 44 | LOCATE 12, 26 45 | PRINT "Press mouse button to quit" 46 | 47 | REM main loop: bob animation, event handling happens during VWAIT 48 | 49 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 50 | SYSTEM 51 | END SUB 52 | ON MOUSE CALL doQuit 53 | MOUSE ON 54 | 55 | DIM AS INTEGER vx=1, vy=1 56 | DIM AS INTEGER x=100, y=100 57 | 58 | WHILE TRUE 59 | VWAIT 60 | BOB MOVE gbob, (x, y) 61 | 62 | x = x + vx 63 | y = y + vy 64 | 65 | IF (x>500) OR (x<10) THEN 66 | vx = -vx 67 | END IF 68 | 69 | IF (y>170) OR (y<20) THEN 70 | vy = -vy 71 | END IF 72 | 73 | GELS REPAINT 74 | WEND 75 | 76 | -------------------------------------------------------------------------------- /tutorial/BitmapDraw.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Draw into an offscreen bitmap 3 | REM 4 | 5 | OPTION EXPLICIT 6 | 7 | WINDOW 1, "Offscreen bitmap draw demo" 8 | 9 | REM create an offscreen bitmap 10 | 11 | DIM AS BITMAP_t PTR bm = BITMAP(32, 32, 2) 12 | 13 | REM draw some graphics and text into it 14 | 15 | BITMAP OUTPUT bm 16 | LINE (0,0)-(31,31),2,B 17 | LINE (1,1)-(30,30),3,BF 18 | COLOR 1,,,DRMD_JAM1 : LOCATE XY (8,18) : PRINT "BM" 19 | 20 | REM switch output back to our window 21 | 22 | WINDOW OUTPUT 1 23 | 24 | REM display our bitmap multiple times 25 | 26 | FOR x AS INTEGER = 20 TO 500 STEP 42 27 | PUT (x, 20), bm 28 | NEXT x 29 | 30 | REM finish 31 | 32 | LOCATE 12, 26 33 | PRINT "Press mouse button to quit" 34 | 35 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 36 | SYSTEM 37 | END SUB 38 | ON MOUSE CALL doQuit 39 | MOUSE ON 40 | 41 | WHILE TRUE 42 | SLEEP 43 | WEND 44 | 45 | -------------------------------------------------------------------------------- /tutorial/CtrlC.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM AQB CTRL-C handler tutorial 3 | REM 4 | 5 | OPTION EXPLICIT 6 | 7 | REM switch off extra CTRL-C code generation for speed 8 | 9 | OPTION BREAK OFF 10 | 11 | REM install our custom CTRL-C handler 12 | 13 | DIM SHARED AS INTEGER ctrlc_cnt=0 14 | 15 | SUB myCtrlCHandler 16 | 17 | ctrlc_cnt = ctrlc_cnt + 1 18 | 19 | IF ctrlc_cnt < 6 THEN 20 | 21 | PRINT "ignoring CTRL-C #";ctrlc_cnt; " of 5" 22 | 23 | REM RESUME NEXT will result in CTRL-C signal being ignored 24 | RESUME NEXT 25 | 26 | ELSE 27 | 28 | REM without RESUME NEXT, we will end up in the usual debugger/runtime error 29 | 30 | PRINT "enough is enough!" 31 | 32 | END IF 33 | 34 | END SUB 35 | 36 | ON BREAK CALL myCtrlCHandler 37 | 38 | WINDOW 1 39 | 40 | PRINT "endless loop (press CTRL-C)..." 41 | WHILE TRUE 42 | SLEEP 43 | WEND 44 | 45 | -------------------------------------------------------------------------------- /tutorial/CustomPointer.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Load a SPRITE from an IFF ILBM image and use it as a custom pointer 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT AnimSupport 7 | 8 | WINDOW 1, "Custom Pointer Demo" 9 | 10 | REM load a sprite from an ILBM file 11 | 12 | DIM AS SPRITE_t PTR sp 13 | 14 | ILBM LOAD SPRITE "PROGDIR:imgs/banana1.iff", sp 15 | 16 | REM use it as a custom mouse pointer 17 | 18 | POINTER SPRITE sp 19 | 20 | REM draw something on the background 21 | 22 | COLOR 3 23 | 24 | FOR x AS INTEGER = 10 TO 630 STEP 3 25 | LINE (x, 10)-(320,190) 26 | NEXT x 27 | 28 | COLOR 1 29 | 30 | LOCATE 12, 26 31 | PRINT "Press mouse button to quit" 32 | 33 | REM main loop 34 | 35 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 36 | SYSTEM 37 | END SUB 38 | ON MOUSE CALL doQuit 39 | MOUSE ON 40 | 41 | WHILE TRUE 42 | SLEEP 43 | WEND 44 | 45 | 46 | -------------------------------------------------------------------------------- /tutorial/FontTutorial.bas: -------------------------------------------------------------------------------- 1 | ' 2 | ' system and custom font loading tutorial 3 | ' 4 | 5 | OPTION EXPLICIT 6 | 7 | WINDOW 1, "Font tutorial" 8 | 9 | ' load a system font 10 | 11 | DIM AS FONT_t PTR emeraldfont = FONT ("emerald.font", 17) 12 | 13 | ' load a font from a specific directory 14 | 15 | DIM AS FONT_t PTR myfont = FONT ("future.font", 30, "PROGDIR:Fonts") 16 | 17 | ' use our custom font 18 | 19 | FONT myfont 20 | 21 | LOCATE 1, 1 22 | 23 | PRINT "future.font" 24 | 25 | ' use the system font 26 | 27 | FONT emeraldfont 28 | 29 | LOCATE 4, 1 30 | 31 | PRINT "emerald.font" 32 | 33 | LOCATE 7,1 34 | 35 | ' use pixel resolution text width and cursor location 36 | ' for font-agnostic text centering 37 | 38 | SUB CPRINT (BYVAL yoff AS INTEGER, BYVAL s AS STRING) 39 | DIM AS INTEGER w = TEXTWIDTH(s) 40 | LOCATE XY (320-w/2, yoff) 41 | PRINT s; 42 | END SUB 43 | 44 | CPRINT 100, "centered text in emerald.font" 45 | 46 | FONT myfont 47 | CPRINT 140, "future.font centered" 48 | 49 | ' fonts support soft styling 50 | 51 | FONT emeraldfont 52 | FONTSTYLE FSF_BOLD OR FSF_UNDERLINED 53 | CPRINT 180, "*** PRESS ENTER TO QUIT ***" 54 | 55 | WHILE INKEY$="" 56 | SLEEP 57 | WEND 58 | 59 | 60 | -------------------------------------------------------------------------------- /tutorial/GadToolsTutorial1.bas: -------------------------------------------------------------------------------- 1 | REM A simple GadTools Button Gadget 2 | 3 | OPTION EXPLICIT 4 | 5 | IMPORT GadToolsSupport 6 | 7 | REM GTGADGETUP callback 8 | 9 | SUB buttonCB (BYVAL g AS CGTGadget PTR, BYVAL code AS UINTEGER) 10 | 11 | TRACE "buttonCB called." 12 | 13 | SYSTEM 14 | 15 | END SUB 16 | 17 | SUB winCloseCB (BYVAL wid AS INTEGER, BYVAL ud AS ANY PTR) 18 | TRACE "window close cb called, wid=";wid 19 | SYSTEM 20 | END SUB 21 | 22 | WINDOW 1, "A simple button gadget" 23 | ON WINDOW CLOSE CALL 1, winCloseCB 24 | 25 | REM create a simple button gadget 26 | 27 | DIM AS CGTButton PTR gadget 28 | 29 | gadget = NEW CGTButton ("QUIT", (15, 26)-(114, 56)) 30 | 31 | REM connect our callback 32 | 33 | gadget->gadgetup_cb = buttonCB 34 | 35 | REM deploy our gadgets to the current window 36 | 37 | GTGADGETS DEPLOY 38 | 39 | REM regular event loop 40 | 41 | WHILE TRUE 42 | SLEEP 43 | WEND 44 | 45 | 46 | -------------------------------------------------------------------------------- /tutorial/GadToolsTutorial2.bas: -------------------------------------------------------------------------------- 1 | REM GadgetTutorial2: multiple gadgets, checkboxes 2 | 3 | OPTION EXPLICIT 4 | 5 | IMPORT GadToolsSupport 6 | 7 | DIM SHARED AS CGTButton PTR button 8 | DIM SHARED AS CGTCheckBox PTR cb1, cb2 9 | 10 | REM callbacks 11 | 12 | SUB winCloseCB (BYVAL wid AS INTEGER, BYVAL ud AS ANY PTR) 13 | SYSTEM 14 | END SUB 15 | 16 | SUB invertCB (BYVAL g AS CGTGadget PTR, BYVAL code AS UINTEGER) 17 | 18 | TRACE "GTG UP cb called for gid ";g->id 19 | 20 | TRACE "inverting checkbox selection" 21 | 22 | cb1->checked = NOT cb1->checked 23 | cb2->checked = NOT cb2->checked 24 | 25 | END SUB 26 | 27 | SUB updateStatus (BYVAL g AS CGTGadget PTR, BYVAL code AS UINTEGER) 28 | TRACE "GTG UP cb called for gid ";g->id;", code=";code 29 | TRACE " status of cb1 is ";cb1->checked 30 | TRACE " status of cb2 is ";cb2->checked 31 | END SUB 32 | 33 | REM create a simple window, connect close button callback 34 | 35 | WINDOW 1, "GadgetTutorial 2" 36 | ON WINDOW CLOSE CALL 1, winCloseCB 37 | 38 | REM create our gadgets (one button and two checkboxes) 39 | 40 | button = NEW CGTButton ("_Invert" , ( 15, 126) - (114, 146)) 41 | cb1 = NEW CGTCheckBox ("Checkbox _1", (115, 20) - (135, 40)) 42 | cb2 = NEW CGTCheckBox ("Checkbox _2", (115, 45) - (135, 65)) 43 | 44 | REM preselect cb2 45 | 46 | cb2->checked = TRUE 47 | 48 | GTGADGETS DEPLOY 49 | 50 | REM connect callbacks to gadget events 51 | 52 | button->gadgetup_cb = invertCB 53 | cb1->gadgetup_cb = updateStatus 54 | cb2->gadgetup_cb = updateStatus 55 | 56 | REM message loop 57 | 58 | WHILE TRUE 59 | SLEEP 60 | WEND 61 | 62 | -------------------------------------------------------------------------------- /tutorial/ILBMBitmap.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Load a BitMap from an IFF ILBM file 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT IFFSupport 7 | 8 | SCREEN 1, 320, 200, 5, 0, "ILBM BitMap Demo" 9 | WINDOW 1, ,(0,0)-(320,200), _ 10 | AW_FLAG_BACKDROP OR AW_FLAG_SIMPLE_REFRESH OR AW_FLAG_BORDERLESS OR AW_FLAG_ACTIVATE, 1 11 | 12 | DIM AS BITMAP_t PTR dragon = NULL 13 | 14 | ILBM LOAD BITMAP "PROGDIR:imgs/dragon.iff", dragon, 1 15 | 16 | 17 | PUT (10, 20), dragon 18 | PUT (160, 50), dragon 19 | 20 | REM WAIT FOR MOUSE BUTTON 21 | 22 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 23 | SYSTEM 24 | END SUB 25 | ON MOUSE CALL doQuit 26 | MOUSE ON 27 | 28 | WHILE TRUE 29 | SLEEP 30 | WEND 31 | 32 | -------------------------------------------------------------------------------- /tutorial/ILBMShow.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM IFF ILBM image loading tutorial 3 | REM 4 | REM Load and display a fullscreen IFF image 5 | REM using a borderless window on a custom bitmap screen 6 | REM 7 | 8 | OPTION EXPLICIT 9 | IMPORT IFFSupport 10 | 11 | DIM AS STRING picFileName = "PROGDIR:imgs/hope.iff" 12 | ' DIM AS STRING picFileName = "SYS:x/hope.iff" 13 | 14 | REM read meta and palette information only for now 15 | 16 | DIM AS ILBM_META_t meta 17 | DIM AS PALETTE_t cmap 18 | 19 | ILBM LOAD BITMAP picFileName,,, @meta, @cmap 20 | 21 | TRACE "Bitmap meta info: w=";meta.w;", h=";meta.h;", nPlanes=";meta.nPlanes;", viewModes=";meta.viewModes 22 | 23 | REM create a matching custom bitmap, screen and borderless window 24 | 25 | DIM AS BITMAP_t PTR bm = BITMAP (meta.w, meta.h, meta.nPlanes) 26 | SCREEN 1, meta.w, meta.h, meta.nPlanes, meta.viewModes, "IFF DEMO", bm 27 | PALETTE LOAD @cmap 28 | WINDOW 1, ,(0,0)-(meta.w,meta.h), _ 29 | AW_FLAG_SIMPLE_REFRESH OR AW_FLAG_BORDERLESS OR AW_FLAG_ACTIVATE, 1 30 | 31 | REM now load the image body into our custom screen bitmap 32 | 33 | ILBM LOAD BITMAP picFileName,bm 34 | 35 | REM WAIT FOR MOUSE BUTTON 36 | 37 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL b AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 38 | SYSTEM 39 | END SUB 40 | ON MOUSE CALL doQuit 41 | MOUSE ON 42 | 43 | WHILE TRUE 44 | SLEEP 45 | WEND 46 | 47 | -------------------------------------------------------------------------------- /tutorial/SoundDemo1.bas: -------------------------------------------------------------------------------- 1 | REM very simple single channel, default sine wave audio example 2 | 3 | OPTION EXPLICIT 4 | 5 | FOR freq AS INTEGER = 440 TO 1000 STEP 15 6 | 7 | TRACE "Frequency: ";freq 8 | SOUND freq, 0.3 9 | 10 | REM sound output happens asynchroneously 11 | REM we can sync to it using the SOUND WAIT statement 12 | SOUND WAIT 13 | 14 | NEXT freq 15 | 16 | -------------------------------------------------------------------------------- /tutorial/SoundDemo2.bas: -------------------------------------------------------------------------------- 1 | REM custom wave audio example 2 | 3 | OPTION EXPLICIT 4 | 5 | REM create a square wave 6 | 7 | DIM AS BYTE wavedata(31) 8 | FOR i AS INTEGER = 0 TO 15 9 | wavedata(i)=127 10 | wavedata(i+16) = -127 11 | NEXT i 12 | 13 | DIM AS WAVE_t PTR w = WAVE (wavedata) 14 | 15 | REM use it for channel 0 16 | 17 | WAVE 0, w 18 | 19 | REM play some sounds 20 | 21 | TRACE "frequency sweep..." 22 | 23 | FOR freq AS INTEGER = 440 TO 880 STEP 50 24 | SOUND freq, 0.1 25 | NEXT freq 26 | 27 | REM wait for sounds to finish 28 | 29 | SOUND WAIT 30 | 31 | REM pause audio output 32 | 33 | SOUND STOP 34 | 35 | SOUND 440, 1 36 | 37 | TRACE "audio output is paused, sleeping for 1s..." 38 | SLEEP FOR 1 39 | 40 | TRACE "re-starting audio output now." 41 | SOUND START 42 | 43 | SOUND WAIT 44 | 45 | -------------------------------------------------------------------------------- /tutorial/SpriteDemo1.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Create a SPRITE and display it 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT AnimSupport 7 | 8 | SCREEN 1, 640, 200, 3, AS_MODE_HIRES, "Sprite Demo" 9 | WINDOW 1, "SPRITE Demo" 10 | 11 | REM create a bitmap, draw into it and create the SPRITE 12 | 13 | DIM AS BITMAP_t PTR bm = NULL 14 | 15 | bm = BITMAP(16, 16, 2) 16 | 17 | BITMAP OUTPUT bm 18 | 19 | LINE (0,0)-(15,15),0,BF 20 | LINE (0,0)-(15,15),2,B 21 | COLOR 1,,,DRMD_JAM1 : LOCATE XY (0,8) : PRINT "SP" 22 | 23 | WINDOW OUTPUT 1 24 | 25 | DIM AS SPRITE_t PTR sp 26 | 27 | sp = SPRITE (bm) 28 | 29 | REM use hardware sprite #1 30 | 31 | SPRITE SHOW 1, sp 32 | 33 | REM background 34 | 35 | COLOR 3 36 | 37 | FOR x AS INTEGER = 10 TO 630 STEP 3 38 | LINE (x, 10)-(320,190) 39 | NEXT x 40 | 41 | COLOR 1 42 | 43 | LOCATE 12, 26 44 | PRINT "Press mouse button to quit" 45 | 46 | REM main loop: sprite animation, event handling happens during VWAIT 47 | 48 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 49 | SYSTEM 50 | END SUB 51 | ON MOUSE CALL doQuit 52 | MOUSE ON 53 | 54 | DIM AS INTEGER vx=1, vy=1 55 | DIM AS INTEGER x=100, y=100 56 | 57 | WHILE TRUE 58 | VWAIT 59 | SPRITE MOVE 1, (x, y) 60 | 61 | x = x + vx 62 | y = y + vy 63 | 64 | IF (x>500) OR (x<10) THEN 65 | vx = -vx 66 | END IF 67 | 68 | IF (y>170) OR (y<20) THEN 69 | vy = -vy 70 | END IF 71 | 72 | WEND 73 | 74 | -------------------------------------------------------------------------------- /tutorial/SpriteDemo2.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Load a SPRITE from an IFF ILBM image 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT AnimSupport 7 | 8 | SCREEN 1, 640, 200, 3, AS_MODE_HIRES, "Sprite Demo 2" 9 | WINDOW 1, "SPRITE Demo 2 - IFF ILBM" 10 | 11 | REM load a sprite from an ILBM file 12 | 13 | DIM AS SPRITE_t PTR sp 14 | 15 | ILBM LOAD SPRITE "PROGDIR:imgs/banana1.iff", sp 16 | 17 | REM display it as hardware sprite #1 18 | 19 | SPRITE SHOW 1, sp 20 | 21 | REM draw something on the background 22 | 23 | COLOR 3 24 | 25 | FOR x AS INTEGER = 10 TO 630 STEP 3 26 | LINE (x, 10)-(320,190) 27 | NEXT x 28 | 29 | COLOR 1 30 | 31 | LOCATE 12, 26 32 | PRINT "Press mouse button to quit" 33 | 34 | REM main loop: sprite animation, event handling happens during VWAIT 35 | 36 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 37 | SYSTEM 38 | END SUB 39 | ON MOUSE CALL doQuit 40 | MOUSE ON 41 | 42 | DIM AS INTEGER vx=1, vy=1 43 | DIM AS INTEGER x=100, y=100 44 | 45 | WHILE TRUE 46 | VWAIT 47 | SPRITE MOVE 1, (x, y) 48 | 49 | x = x + vx 50 | y = y + vy 51 | 52 | IF (x>500) OR (x<10) THEN 53 | vx = -vx 54 | END IF 55 | 56 | IF (y>170) OR (y<20) THEN 57 | vy = -vy 58 | END IF 59 | 60 | WEND 61 | 62 | -------------------------------------------------------------------------------- /tutorial/SpriteDemo3.bas: -------------------------------------------------------------------------------- 1 | REM 2 | REM Sprite animation, extract multiple frames from one IFF 3 | REM 4 | 5 | OPTION EXPLICIT 6 | IMPORT AnimSupport 7 | 8 | SCREEN 1, 640, 200, 3, AS_MODE_HIRES, "Sprite Demo 3" 9 | WINDOW 1, "SPRITE Demo 3 - Animation" 10 | 11 | DIM AS BITMAP_t PTR bananaBM = NULL 12 | 13 | ILBM LOAD BITMAP "PROGDIR:imgs/banana.iff", bananaBM 14 | 15 | DIM AS SPRITE_t PTR sp(23) 16 | 17 | FOR i AS INTEGER = 0 TO 11 18 | sp(i) = SPRITE (bananaBM, (i*16,0)-(i*16+15,15)) 19 | sp(i+12) = SPRITE (bananaBM, (i*16,16)-(i*16+15,31)) 20 | NEXT i 21 | 22 | REM sprite colors 23 | 24 | PALETTE 21, 0.8, 0.8, 0 25 | PALETTE 22, 0, 0, 0 26 | PALETTE 23, 1, 1, 0 27 | 28 | REM draw something on the background 29 | 30 | COLOR 3 31 | 32 | FOR x AS INTEGER = 10 TO 630 STEP 3 33 | LINE (x, 10)-(320,190) 34 | NEXT x 35 | 36 | COLOR 1 37 | 38 | LOCATE 12, 26 39 | PRINT "Press mouse button to quit" 40 | 41 | REM main loop: sprite animation, event handling happens during VWAIT 42 | 43 | SUB doQuit (BYVAL wid AS INTEGER, BYVAL button AS BOOLEAN, BYVAL mx AS INTEGER, BYVAL my AS INTEGER, BYVAL ud AS ANY PTR) 44 | SYSTEM 45 | END SUB 46 | ON MOUSE CALL doQuit 47 | MOUSE ON 48 | 49 | DIM AS INTEGER vx=1, vy=1 50 | DIM AS INTEGER x=100, y=100 51 | 52 | DIM AS INTEGER spmov=0 53 | 54 | WHILE TRUE 55 | VWAIT 56 | 57 | spmov = (spmov + 1) MOD 24 58 | SPRITE SHOW 2, sp(spmov) 59 | 60 | 61 | SPRITE MOVE 2, (x, y) 62 | 63 | x = x + vx 64 | y = y + vy 65 | 66 | IF (x>500) OR (x<10) THEN 67 | vx = -vx 68 | END IF 69 | 70 | IF (y>170) OR (y<20) THEN 71 | vy = -vy 72 | END IF 73 | 74 | WEND 75 | 76 | -------------------------------------------------------------------------------- /tutorial/TagListTutorial.bas: -------------------------------------------------------------------------------- 1 | REM TAGLIST / TAGITEM tutorial 2 | 3 | OPTION EXPLICIT 4 | 5 | IMPORT OSUtility 6 | 7 | SUB traceTagList (BYVAL tagList AS TagItem PTR) 8 | 9 | REM iterate over tagitems 10 | 11 | DIM AS TagItem PTR tstate = tagList 12 | 13 | DIM AS INTEGER cnt=0 14 | TRACE "["; 15 | DO 16 | 17 | DIM AS TagItem PTR t = NextTagItem (@tstate) 18 | 19 | IF t=NULL THEN EXIT 20 | 21 | TRACE " (";t->ti_Tag;":";t->ti_Data;")"; 22 | cnt = cnt + 1 23 | LOOP 24 | 25 | TRACE " ] #";cnt 26 | 27 | END SUB 28 | 29 | REM create a TagItem list containing 3 TagItems + end marker 30 | 31 | DIM AS TagItem PTR mytagitems = TAGITEMS (42, 1000, 43, 500, 44, 2000, TAG_DONE) 32 | 33 | TRACE "whole tag list: "; 34 | traceTagList mytagitems 35 | 36 | REM find a tag item 37 | 38 | DIM AS TagItem PTR myti = FindTagItem (43, mytagitems) 39 | 40 | IF myti<>NULL THEN 41 | TRACE "found tag item: tag=";myti->ti_Tag;", data=";myti->ti_Data 42 | ELSE 43 | TRACE "tag item not found." 44 | END IF 45 | 46 | 47 | REM filter TagItems 48 | 49 | FilterTagItems (mytagitems, TAGS(43,44), TAGFILTER_AND) 50 | TRACE "filtered tag list: "; 51 | traceTagList mytagitems 52 | 53 | 54 | --------------------------------------------------------------------------------