Full Code of rtrussell/BBCSDL for AI

master 483d7489af3b cached
390 files
5.2 MB
1.4M tokens
1488 symbols
1 requests
Download .txt
Showing preview only (5,527K chars total). Download the full file or copy to clipboard to get everything.
Repository: rtrussell/BBCSDL
Branch: master
Commit: 483d7489af3b
Files: 390
Total size: 5.2 MB

Directory structure:
gitextract_wqkzv1mv/

├── .gitattributes
├── .gitignore
├── README.md
├── bbcsdl.bbc
├── bin/
│   ├── android/
│   │   ├── Android.mk
│   │   ├── AndroidManifest.xml
│   │   ├── Application.mk
│   │   ├── BBCBasic.java
│   │   ├── autorun.bbc
│   │   ├── bbdata_x86_64.asm
│   │   ├── build.gradle
│   │   ├── help.bbc
│   │   ├── help.txt
│   │   └── styles.xml
│   ├── ios/
│   │   ├── autorun.bbc
│   │   ├── exported.txt
│   │   ├── help.bbc
│   │   └── help.txt
│   ├── linux/
│   │   ├── install32.txt
│   │   ├── install64.txt
│   │   ├── makefile
│   │   └── mkicon.sh
│   ├── macos/
│   │   └── makefile
│   ├── raspi/
│   │   ├── gpiodemo.bbc
│   │   ├── gpiotest.bbc
│   │   ├── install-rpi.txt
│   │   ├── makefile
│   │   └── mkicon.sh
│   ├── rpi64/
│   │   ├── gpiodemo.bbc
│   │   ├── gpiotest.bbc
│   │   ├── install-rpi.txt
│   │   └── makefile
│   ├── wasm/
│   │   ├── BBC.h
│   │   ├── autorun.bbc
│   │   ├── bbcsdl.h
│   │   ├── bbcsdl_shell.html
│   │   ├── makefile
│   │   └── readme.txt
│   ├── win32/
│   │   ├── makefile
│   │   ├── sdlrun.c
│   │   └── unpack32.nas
│   └── win64/
│       ├── makefile
│       ├── sdlrun.c
│       └── unpack64.nas
├── console/
│   ├── linux/
│   │   └── makefile
│   ├── macm1/
│   │   └── makefile
│   ├── macos/
│   │   └── makefile
│   ├── raspi/
│   │   └── makefile
│   ├── rpi64/
│   │   └── makefile
│   └── win64/
│       └── makefile
├── examples/
│   ├── about.bbc
│   ├── games/
│   │   ├── .Tables/
│   │   │   ├── Choice.mtb
│   │   │   ├── CrnrPerm.mtb
│   │   │   ├── CrnrSlic.ptb
│   │   │   ├── EdgePerm.mtb
│   │   │   ├── EdgeSlic.ptb
│   │   │   ├── Flip.mtb
│   │   │   ├── FlipChce.ptb
│   │   │   ├── SlicPerm.mtb
│   │   │   ├── Twist.mtb
│   │   │   ├── TwstChce.ptb
│   │   │   └── TwstFlip.ptb
│   │   ├── 2048.bbc
│   │   ├── Rubik.bbc
│   │   ├── animal.bbc
│   │   ├── buggy.bbc
│   │   ├── bugs.bbc
│   │   ├── cowboy.bbc
│   │   ├── dibley.bbc
│   │   ├── dibley.txt
│   │   ├── dropperz.bbc
│   │   ├── gorillas.bbc
│   │   ├── hangman.bbc
│   │   ├── hanoi.bbc
│   │   ├── jigsaw.bbc
│   │   ├── lemmings.bbc
│   │   ├── rheolism.bbc
│   │   ├── snake.bbc
│   │   ├── sudoku.bbc
│   │   ├── tower.bbc
│   │   └── triples.bbc
│   ├── general/
│   │   ├── BBSterm.bbc
│   │   ├── SkyBaby.bbc
│   │   ├── analyser.bbc
│   │   ├── banner.bbc
│   │   ├── banner.xml
│   │   ├── bbcbasic.txt
│   │   ├── bezierfit.bbc
│   │   ├── bigdem.bbc
│   │   ├── calculator.bbc
│   │   ├── calendar.bbc
│   │   ├── ceefax.bbc
│   │   ├── ceefax.car
│   │   ├── client.bbc
│   │   ├── conway.bbc
│   │   ├── dlgdemo.bbc
│   │   ├── ellipsefit.bbc
│   │   ├── example.csv
│   │   ├── filters.bbc
│   │   ├── kerning.bbc
│   │   ├── lanchat.bbc
│   │   ├── listdemo.bbc
│   │   ├── mode7dem.bbc
│   │   ├── mode7dem.car
│   │   ├── multidem.bbc
│   │   ├── multitouch.bbc
│   │   ├── mysqldem.bbc
│   │   ├── optics.bbc
│   │   ├── pdfdemo.bbc
│   │   ├── poem.bbc
│   │   ├── polyfit.bbc
│   │   ├── polyfit.csv
│   │   ├── prompter.bbc
│   │   ├── recorder.bbc
│   │   ├── scroll.bbc
│   │   ├── server.bbc
│   │   ├── server_multi.bbc
│   │   ├── sheet.bbc
│   │   ├── solve.bbc
│   │   ├── sortdemo.bbc
│   │   ├── sorttest.bbc
│   │   ├── telstar.bbc
│   │   ├── textedit.bbc
│   │   ├── timerdem.bbc
│   │   ├── unicode.bbc
│   │   ├── video.bbc
│   │   ├── weather.car
│   │   └── welcome.bbc
│   ├── graphics/
│   │   ├── Demo.ptr
│   │   ├── aagfxdem.bbc
│   │   ├── aliens.bbc
│   │   ├── anigif.bbc
│   │   ├── bbcowl.bbc
│   │   ├── bounce.bbc
│   │   ├── candle.bbc
│   │   ├── chain.bbc
│   │   ├── clock.bbc
│   │   ├── colorcycle.bbc
│   │   ├── disco.bbc
│   │   ├── doodle.bbc
│   │   ├── ellipses.bbc
│   │   ├── fern.bbc
│   │   ├── fire.bbc
│   │   ├── flier.bbc
│   │   ├── flood.bbc
│   │   ├── fluid.bbc
│   │   ├── illusion.bbc
│   │   ├── jclock.bbc
│   │   ├── kaleidoscope.bbc
│   │   ├── knots.bbc
│   │   ├── lighting.bbc
│   │   ├── mandel.bbc
│   │   ├── opengl.bbc
│   │   ├── pageturn.bbc
│   │   ├── penrose.bbc
│   │   ├── persian.bbc
│   │   ├── piechart.bbc
│   │   ├── pointer.bbc
│   │   ├── polydots.bbc
│   │   ├── polygon.bbc
│   │   ├── pyramid.bbc
│   │   ├── raytrace.bbc
│   │   ├── saucer.bbc
│   │   ├── scarab.bbc
│   │   ├── seascape.bbc
│   │   ├── sine.bbc
│   │   ├── sliderule.bbc
│   │   ├── slitscan.bbc
│   │   ├── smithchart.bbc
│   │   ├── snowscene.bbc
│   │   ├── soccerball.bbc
│   │   ├── spectrum.bbc
│   │   ├── spotlight.bbc
│   │   ├── squares.bbc
│   │   ├── surks.bbc
│   │   ├── swirl.bbc
│   │   ├── teapot.bbc
│   │   ├── teapot.fvf
│   │   ├── torus2d.bbc
│   │   ├── truchet.bbc
│   │   ├── vampire.bbc
│   │   ├── voronoi.bbc
│   │   ├── wheel.bbc
│   │   └── world.bbc
│   ├── immediate.bbc
│   ├── keywords.bbc
│   ├── keywords.txt
│   ├── physics/
│   │   ├── .pinball/
│   │   │   ├── ball.fvf
│   │   │   ├── flipper1.fvf
│   │   │   ├── flipper2.fvf
│   │   │   ├── pinball.fvf
│   │   │   └── plunger.fvf
│   │   ├── bbclock.bbc
│   │   ├── cradle.bbc
│   │   ├── cradle.fvf
│   │   ├── crates.bbc
│   │   ├── dangle.bbc
│   │   ├── dunebuggy.bbc
│   │   ├── girder.fvf
│   │   ├── lotto.bbc
│   │   ├── pinball.bbc
│   │   ├── pintograph.bbc
│   │   ├── plinth.fvf
│   │   ├── samples/
│   │   │   ├── Hello_Box2D.bbc
│   │   │   ├── SAMPLES.bbc
│   │   │   ├── breakable.bbc
│   │   │   ├── bridge.bbc
│   │   │   ├── bullet.bbc
│   │   │   ├── cantilever.bbc
│   │   │   ├── car.bbc
│   │   │   ├── chain.bbc
│   │   │   ├── confined.bbc
│   │   │   ├── crank.bbc
│   │   │   ├── dominos.bbc
│   │   │   ├── gears.bbc
│   │   │   ├── lotto.bbc
│   │   │   ├── pendulum1.bbc
│   │   │   ├── pendulum2.bbc
│   │   │   ├── pendulum3.bbc
│   │   │   ├── pendulum4.bbc
│   │   │   ├── pendulum5.bbc
│   │   │   ├── pendulum6.bbc
│   │   │   ├── platform.bbc
│   │   │   ├── pyramid.bbc
│   │   │   ├── radialgravity.bbc
│   │   │   ├── sensor.bbc
│   │   │   └── wobble.bbc
│   │   ├── spinmaze.bbc
│   │   └── trebuchet.bbc
│   ├── sounds/
│   │   ├── bauble.bbc
│   │   ├── bauble.fvf
│   │   ├── belier.bbc
│   │   ├── blacksmith.bbc
│   │   ├── brandenburg.bbc
│   │   ├── carolmedley.bbc
│   │   ├── carousel.bbc
│   │   ├── carousel.fvf
│   │   ├── crank.fvf
│   │   ├── dubois.bbc
│   │   ├── entertainer.bbc
│   │   ├── figleaf.bbc
│   │   ├── forge.fvf
│   │   ├── ground.fvf
│   │   ├── handle.fvf
│   │   ├── horses.fvf
│   │   ├── icerink.fvf
│   │   ├── lights1.fvf
│   │   ├── lights2.fvf
│   │   ├── metronome.bbc
│   │   ├── nut.fvf
│   │   ├── piano.bbc
│   │   ├── platform.fvf
│   │   ├── polly.bbc
│   │   ├── skater.fvf
│   │   ├── skaters.bbc
│   │   ├── skaters.tun
│   │   ├── soldier.fvf
│   │   ├── soldiers.bbc
│   │   ├── tocfugue.bbc
│   │   ├── tofair.bbc
│   │   ├── tofair.tun
│   │   ├── widor.bbc
│   │   └── xmascene.fvf
│   ├── starcmds.bbc
│   ├── starcmds.txt
│   ├── tools/
│   │   ├── BBCEdit/
│   │   │   ├── bgroupmod.bbc
│   │   │   ├── dlgmod.bbc
│   │   │   ├── filedlgmod.bbc
│   │   │   ├── menumod.bbc
│   │   │   └── msgmod.bbc
│   │   ├── BBCEdit.bbc
│   │   ├── SDLIDE.bbc
│   │   ├── addconst.bbc
│   │   ├── compiler.bbc
│   │   ├── crossref.bbc
│   │   ├── getri.bbc
│   │   ├── hello.bbc
│   │   ├── listvars.bbc
│   │   ├── macrorec.bbc
│   │   ├── memmon.bbc
│   │   ├── mmap.bbc
│   │   ├── profiler.bbc
│   │   ├── saa505x.bbc
│   │   ├── searchin.bbc
│   │   ├── settab.bbc
│   │   ├── sysvars.bbc
│   │   ├── timing.bbc
│   │   ├── touchide.bbc
│   │   └── versinfo.bbc
│   ├── vducodes.bbc
│   └── vducodes.txt
├── include/
│   ├── BBC.h
│   ├── SDL2_gfxPrimitives.h
│   ├── SDL2_gfxPrimitives_font.h
│   ├── SDL2_rotozoom.h
│   ├── SDL_net.h
│   ├── SDL_stbimage.h
│   ├── SDL_ttf.h
│   ├── bbccon.h
│   ├── bbcsdl.h
│   ├── begin_code.h
│   ├── close_code.h
│   ├── dr_mp3.h
│   ├── stb_image.h
│   ├── version.h
│   ├── zconf.h
│   └── zlib.h
├── lib/
│   ├── Bedstead-ext.otf
│   ├── Bedstead.otf
│   ├── Unifont.otf
│   ├── aagfxlib.bbc
│   ├── arraylib.bbc
│   ├── audiolib.bbc
│   ├── bigint.bbc
│   ├── box2ddbg.bbc
│   ├── box2dgfx.bbc
│   ├── box2dlib.bbc
│   ├── classlib.bbc
│   ├── datelib.bbc
│   ├── dlglib.bbc
│   ├── editbox.bbc
│   ├── ellipse.bbc
│   ├── eventlib.bbc
│   ├── filedlg.bbc
│   ├── fnusing.bbc
│   ├── gfxlib.bbc
│   ├── gleslib.bbc
│   ├── gpiolib.bbc
│   ├── imglib.bbc
│   ├── listlib.bbc
│   ├── memusage.bbc
│   ├── menulib.bbc
│   ├── mode7lib.bbc
│   ├── msgbox.bbc
│   ├── multiwin.bbc
│   ├── mysqllib.bbc
│   ├── nowait.bbc
│   ├── ogllib.bbc
│   ├── pdflib.bbc
│   ├── script.bbc
│   ├── sdldebug.bbc
│   ├── shaderlib.bbc
│   ├── socklib.bbc
│   ├── sortlib.bbc
│   ├── stringlib.bbc
│   ├── timerlib.bbc
│   ├── treeview.bbc
│   ├── utf8lib.bbc
│   ├── webgllib.bbc
│   └── xmllib.bbc
├── licence.txt
├── src/
│   ├── SDL2_gfxPrimitives.c
│   ├── SDL2_rotozoom.c
│   ├── b2Alias.cpp
│   ├── bbasmb_arm_32.c
│   ├── bbasmb_arm_64.c
│   ├── bbasmb_arm_v6m.c
│   ├── bbasmb_wasm32.c
│   ├── bbasmb_x86_32.TODO.c
│   ├── bbasmb_x86_64.c
│   ├── bbccli.c
│   ├── bbccon.c
│   ├── bbccos.c
│   ├── bbcmos.c
│   ├── bbcsdl.c
│   ├── bbctmp.m
│   ├── bbcvdu.c
│   ├── bbcvtx.c
│   ├── bbdata_arm_32.s
│   ├── bbdata_arm_64.s
│   ├── bbdata_wasm32.c
│   ├── bbdata_x86_32.nas
│   ├── bbdata_x86_64.nas
│   ├── bbeval.c
│   ├── bbexec.c
│   ├── bbmain.c
│   ├── flood.c
│   ├── sort.c
│   └── sound_sdl.c
└── tests/
    ├── ALLTESTS.bbc
    ├── arraytst.bbc
    ├── byreftst.bbc
    ├── convertst.bbc
    ├── errortst.bbc
    ├── exittest.bbc
    ├── filetest.bbc
    ├── fortest.bbc
    ├── int64tst.bbc
    ├── slicetest.bbc
    └── structst.bbc

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.ptb binary


================================================
FILE: .gitignore
================================================
# Prerequisites
*.d
*.bat

# Object files
*.o
*.ko
*.obj
build/

# Linker output
*.ilk
*.map
*.exp

# Precompiled Headers
*.gch
*.pch

# Libraries
*.lib
*.a
*.la
*.lo

# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib

# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

# Debug files
*.dSYM/
*.su
*.idb
*.pdb

# Editor files
*~
#*
.#*


================================================
FILE: README.md
================================================
# BBCSDL
BBC BASIC for SDL 2.0 (BBCSDL) is a cross-platform implementation of the BBC BASIC programming language for
Windows, Linux (x86), MacOS, Raspbian (Raspberry Pi OS), Android, iOS and Emscripten / WebAssembly.
It is highly compatible with BBC BASIC for Windows and has the same language extensions, but uses
SDL 2.0 as an OS abstraction layer to achieve cross-platform compatibility.

The BBC BASIC Console Mode editions (BBCTTY) are lightweight implementations for Windows, Linux (x86),
MacOS and Raspbian (Raspberry Pi OS) which do not support graphics or sound but are otherwise 
compatible with the desktop, mobile and web editions.  They take their input from stdin and
send their output to stdout, so may be used for scripting, CGI and remote terminal applications.

![Architecture](https://www.bbcbasic.co.uk/bbcsdl/arch.png)

The files in green constitute the generic BBC BASIC interpreter which is shared by all the
editions.  The files in the red box are used to build the Console Mode editions.  The files in
the blue box are used to build the SDL 2.0 editions.  The files in brown run in the GUI (main)
thread, all the others run in the interpreter thread.

The files with the 1 and 2 superscripts are CPU-specific and the different variants are listed
beneath (not all exist!).  Note that bbasmb_wasm32.c isn't an assembler, but has been used as a
convenient place to put the function wrappers needed to support SYS in the in-browser edition.

Not indicated in the diagram is that the in-browser edition uses different versions of bbc.h
and bbcsdl.h from the rest.

Note that the name 'BBC BASIC' is used by permission of the British Broadcasting Corporation
and is not transferrable to a derived or forked work.


================================================
FILE: bin/android/Android.mk
================================================
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libbbc-prebuilt

LOCAL_MODULE := main

SDL_PATH := ../SDL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -lOpenSLES -llog -landroid

LOCAL_LDFLAGS += -Wl,-z,max-page-size=16384

ifeq ($(TARGET_ARCH),x86_64)

LOCAL_SRC_FILES := bbdata_x86_64.asm bbmain.c bbexec.c bbeval.c bbcmos.c bbccli.c bbcvdu.c \
	bbcvtx.c flood.c bbcsdl.c bbasmb_x86_64.c SDL2_gfxPrimitives.c SDL2_rotozoom.c

LOCAL_CFLAGS := -fsigned-char

endif

ifeq ($(TARGET_ARCH),arm)

LOCAL_SRC_FILES := bbdata_arm_32.s bbmain.c bbexec.c bbeval.c bbcmos.c.neon bbccli.c bbcvdu.c \
	bbcvtx.c flood.c bbcsdl.c bbasmb_arm_32.c SDL2_gfxPrimitives.c SDL2_rotozoom.c sort.c

LOCAL_CFLAGS := -munaligned-access -fsigned-char

endif

ifeq ($(TARGET_ARCH),arm64)

LOCAL_SRC_FILES := bbdata_arm_64.s bbmain.c bbexec.c bbeval.c bbcmos.c.neon bbccli.c bbcvdu.c \
	bbcvtx.c flood.c bbcsdl.c bbasmb_arm_64.c SDL2_gfxPrimitives.c SDL2_rotozoom.c sort.c

LOCAL_CFLAGS := -fsigned-char

endif

LOCAL_SHARED_LIBRARIES := SDL2 SDL2_ttf SDL2_net Box2D

include $(BUILD_SHARED_LIBRARY)


================================================
FILE: bin/android/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Replace com.test.game with the identifier of your game below, e.g.
     com.gamemaker.game
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="149"
    android:versionName="1.44a"
    android:installLocation="auto">

    <!-- OpenGL ES 2.0 -->
    <uses-feature android:glEsVersion="0x00020000" />

    <!-- Touchscreen support -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <!-- Game controller support -->
    <uses-feature
        android:name="android.hardware.bluetooth"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.gamepad"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.usb.host"
        android:required="false" />

    <!-- External mouse input events -->
    <uses-feature
        android:name="android.hardware.type.pc"
        android:required="false" />

    <!-- Audio recording support -->
    <!-- if you want to capture audio, uncomment this. -->
    <uses-feature
        android:name="android.hardware.microphone"
        android:required="false" />

    <!-- Allow downloading to the external storage on Android 5.1 and older -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

    <!-- Allow access to Bluetooth devices -->
    <!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
    <!-- <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> -->
    <!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> -->

    <!-- Allow access to the vibrator -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <!-- if you want to capture audio, uncomment this. -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <!-- Create a Java class extending SDLActivity and place it in a
         directory under app/src/main/java matching the package, e.g. app/src/main/java/com/gamemaker/game/MyGame.java
 
         then replace "SDLActivity" with the name of your class (e.g. "MyGame")
         in the XML below.

         An example Java class can be found in README-android.md
    -->
    <application android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:allowBackup="true"
        android:theme="@style/AppTheme"
        android:hardwareAccelerated="true" >

        <!-- Example of setting SDL hints from AndroidManifest.xml:
        <meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/>
         -->

        <meta-data android:name="android.window.extensions.disableEdgeToEdge" android:value="true" />
     
        <activity android:name="BBCBasic"
            android:label="@string/app_name"
            android:alwaysRetainTaskState="true"
            android:launchMode="singleInstance"
            android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
            android:screenOrientation="fullSensor"
            android:exported="true"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Let Android know that we can handle some USB devices and should receive this event -->
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>
            <!-- Drop file event -->
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="file"/>
                <data android:scheme="content"/>
                <data android:mimeType="*/*" />
                <data android:host="*"/>
                <data android:pathPattern=".*\\.bbc"/>
                <data android:pathPattern=".*\\..*\\.bbc"/>
                <data android:pathPattern=".*\\..*\\..*\\.bbc"/>
                <data android:pathPattern=".*\\..*\\..*\\..*\\.bbc"/>
            </intent-filter>
        </activity>
    </application>

</manifest>


================================================
FILE: bin/android/Application.mk
================================================

# Uncomment this if you're using STL in your project
# You can find more information here:
# https://developer.android.com/ndk/guides/cpp-support
APP_STL := c++_shared

APP_ABI := armeabi-v7a arm64-v8a x86_64
APP_CFLAGS += -Os
NDK_TOOLCHAIN_VERSION := 4.9

# Min runtime API level
APP_PLATFORM=android-16

# For 16K page size
APP_SUPPORT_FLEXIBLE_PAGE_SIZES := TRUE



================================================
FILE: bin/android/BBCBasic.java
================================================
package com.rtrussell.bbcbasic;

import org.libsdl.app.SDLActivity; 

public class BBCBasic extends SDLActivity
{
    protected String[] getLibraries() {
        return new String[] {
            "c++_shared",
            "Box2D",
            // "hidapi",
            "SDL2",
            // "SDL2_image",
            // "SDL2_mixer",
            "SDL2_net",
            "SDL2_ttf",
            "main"
        };
    }

    /**
     * Override so that BBC2APK can set orientation in manifest
     */
    public void setOrientationBis(int w, int h, boolean resizable, String hint)
    {
    }
}


================================================
FILE: bin/android/bbdata_x86_64.asm
================================================
;/*****************************************************************\
;*       BBC BASIC for SDL 2.0 (x86_64)                            *
;*       Copyright (c) R. T. Russell, 2000-2023                    *
;*                                                                 *
;*       BBCDATA.NAS RAM data definitions                          *
;*       Version 1.38a, 02-Sep-2023                                *
;\*****************************************************************/
;
MAX_PORTS       EQU     4       ; Maximum number of i/o ports
MAX_FILES       EQU     8       ; Maximum number of open files
SOUNDQE         EQU     4       ; Number of bytes per sound entry
SOUNDQL         EQU     5*SOUNDQE ; Number of bytes per channel
;
	GLOBAL	stavar,lc,oc,pc,dynvar,fnptr,proptr,prand
	GLOBAL	accs,buff,vpage,flist,lomem,pfree,himem
	GLOBAL	errtxt,onersp,errtrp,datptr,curlin,errlin
	GLOBAL	tracen,random,vcount,vwidth,errnum,liston,tmps
;
	GLOBAL	path,keystr,keybdq,keyptr,spchan,exchan,tweak
	GLOBAL	fcbtab,timoff,usrchr,soundq,envels,waves,libase
	GLOBAL	eventq,timtrp,clotrp,siztrp,systrp,moutrp
	GLOBAL	alltrp,iMsg,wParam,lParam,filbuf,portab,fvtab
;
	GLOBAL	forgnd,bakgnd,hfont,colmsk,modeno,lthick,hrect
	GLOBAL	origx,origy,lastx,lasty,prevx,prevy,pfont,cmcflg
	GLOBAL	textwl,textwr,textwt,textwb,sizex,sizey,sclflg
	GLOBAL	textx,texty,charx,chary,cursa,cursb,tempo
	GLOBAL	pixelx,pixely,txtfor,txtbak,optval,farray,fasize
;
	GLOBAL	vduq,queue,flags,kbdqw,kbdqr,keyexp,scroln
	GLOBAL	vflags,sndqw,sndqr,sacc,smix,evtqw,evtqr
	GLOBAL	eenvel,escale,epsect,easect,epitch,elevel,ecount
;
	GLOBAL	hwndProg,zoom,offsetx,offsety,platform
	GLOBAL	memhdc,reflag,sysflg,panx,pany
	GLOBAL	prntx,prnty,prchx,prchy,cursx
	GLOBAL	paperl,paperr,papert,paperb,lstopt
;
	GLOBAL	datend,sysvar,bbcfont,lastick,link00
	GLOBAL	cmdlen,cmdadr,dirlen,diradr,liblen,libadr
	GLOBAL	usrlen,usradr,tmplen,tmpadr,hwo
	GLOBAL	voices,chrmap
	GLOBAL	breakpt,breakhi,ttxtfont
;
	EXTERN	loadn,loads,storen,stores,getvar,putvar,expr,item,lexan
	EXTERN	xfloat,xfix,xeq,token,putevt,palette,str00,con,TTFcache
;
	EXTERN	gfxPrimitivesGetFont,gfxPrimitivesSetFont,RedefineChar
;
%define  checkalign
;
	SEGMENT .data		; Crashes if .bss
;
;The following locations are initialised to zero when program is RUN:
;Variables used by generic modules (bbmain, bbexec, bbeval, bbasmb)
;
	align	16,db 0
stavar:	times 12 dd 0		; Static variables @% to K%
lc:	dd	0		; Static variable L%
	times 2	dd 0		; Static variables M%, N%
oc:	dd	0		; Static variable O%
pc:	dd	0		; Static variable P%
	times 10 dd 0		; Static variables Q% to Z%
dynvar:	times 54 dd 0		; ( Pointers to dynamic vars   )
fnptr:	dd	0		; ( Pointer to user FuNctions  ) grouped
proptr:	dd	0		; ( Pointer to user PROCedures )
accs:	dd	0		; Pointer to string accumulator
	dd	0		; 64-bit pointer
vpage:	dd	0		; Current value of PAGE
tracen:	dd	0		; Maximum line number to trace
lomem:	dd	0		; Current value of LOMEM
pfree:	dd	0		; Pointer to start of free space
himem:	dd	0		; Current value of HIMEM
libase:	dd	0		; Pointer to INSTALLed library
errtxt:	dd	0		; Pointer to error text for REPORT
	dd	0		; 64-bit pointer
errtrp:	dd	0		; Pointer to ON ERROR statement
datptr:	dd	0		; Pointer to DATA statements
vcount:	dd	0		; Current value of COUNT
curlin:	dd	0		; Pointer to current statement
alltrp:				; Start of trap pointers
timtrp:	dd	0		; Pointer to ON TIME statement
clotrp:	dd	0		; Pointer to ON CLOSE statement
siztrp:	dd	0		; Pointer to ON MOVE statement
systrp:	dd	0		; Pointer to ON SYS statement
moutrp:	dd	0		; Pointer to ON MOUSE statement
errlin:	dd	0		; Pointer to last error statement
;
prand:
random:	times 5 db 0		; Current 'random' number (5 bytes)
vwidth:	db	0		; Current value of WIDTH
errnum:	db	0		; Error code of last error
liston:	db	0		; *FLOAT/*HEX/*LOWERCASE/OPT
;
;Variables used by OS-specific modules (bbcmos, bbccli, bbcvdu, bbcvtx)
;
	align	4,db 0
path:	dd	0		; Pointer to path/filename buffer
	dd	0		; 64-bit pointer
keybdq:	dd	0		; Pointer to keyboard queue
	dd	0		; 64-bit pointer
keyptr:	dd	0		; Pointer to *KEY string
	dd	0		; 64-bit pointer
;
lstopt:	db	0		; LISTO value (indentation)
sclflg:	db	0		; Scroll flag (COPY key)
optval:	db	0		; *OUTPUT and *INPUT values
;
; ------ End of 'absolutely-addressed' variables ------
;
farray:	db	0		; Number of dimensions = 1  |
fasize:	dd	0		; Number of elements = 16   |
filbuf:	dq	0		; Pointer to file buffers   | @hfile%%()
portab:	times MAX_PORTS dq 0	; Table of port handles     | 
chntab:	times MAX_FILES dq 0	; Table of file handles     | 
exchan:	dq	0		; Handle for *EXEC   @hfile%%(13)
spchan:	dq	0		; Handle for *SPOOL  @hfile%%(14)
ptchan:	dq	0		; Handle for printer @hfile%%(15)
;
fcbtab:	times MAX_FILES dd 0	; Table of FCBs
voices:	times 4 db 0		; Voices (waveforms) for sound channels
;
flist:	times 33 dq 0		; Pointers to string free lists
tmps:	dd	0		; Temp string descriptor: address
	dd	0		; Temp string descriptor: length
;
; Variables moved here to make room for 64-bit pointers and handles:
;
onersp:	dd	0		; ESP storage for ON ERROR LOCAL
	dd	0		; 64-bit pointer
buff:	dd	0		; Pointer to string input buffer
	dd	0		; 64-bit pointer
keystr:	dd	0		; Pointer to user *KEY strings
	dd	0		; 64-bit pointer
usrchr:	dd	0		; Pointer to user-defined characters
	dd	0		; 64-bit pointer
waves:	dd	0		; Pointer to SOUND waveforms
	dd	0		; 64-bit pointer
envels:	dd	0		; Pointer to ENVELOPEs
	dd	0		; 64-bit pointer
eventq:	dd	0		; Pointer to event queue
	dd	0		; 64-bit pointer
hrect:	dd	0		; Pointer to clip rect (part of @vdu{})
	dd	0		; 64-bit pointer
;
;Text/graphics metrics (pointed to by @vdu%):
;
vduvar:
origx:	dd	0		; Graphics horizontal origin
origy:	dd	0		; Graphics vertical origin
lastx:	dd	0		; Immediately preceding x-coordinate
lasty:	dd	0		; Immediately preceding y-coordinate
prevx:	dd	0		; Previous x-coordinate
prevy:	dd	0		; Previous y-coordinate
textwl:	dd	0		; Text window left (pixels)
textwr:	dd	0		; Text window right (pixels)
textwt:	dd	0		; Text window top (pixels)
textwb:	dd	0		; Text window bottom (pixels)
pixelx:	dd	0		; Width of a graphics pixel
pixely:	dd	0		; Height of a graphics pixel
textx:	dd	0		; Text pointer (cursor x)
texty:	dd	0		; Text pointer (cursor y)
hfont:	dd	0		; Handle of current font
	dd	0		; 64-bit handle
;
forgnd:	dw	0		; Graphics foreground colour/action
bakgnd:	dw	0		; Graphics background colour/action
;
cursa:	db	0		; Start (top) line of cursor
cursb:	db	0		; Finish (bottom) line of cursor
txtfor:	db	0		; Text foreground colour
txtbak:	db	0		; Text background colour
modeno:	db	0		; Mode number
colmsk:	db	0		; Mask for maximum number of colours
vflags:	db	0		; VDU driver flags
scroln:	db	0		; Scroll counter in paged mode
cursx:	db	0		; Cursor (caret) width
lthick:	db	0		; Line thickness (lines, outline shapes)
cmcflg:	db	0		; V5.3 cursor movement flags
tweak:	db	0		; Character spacing adjustment (signed) 
;
sndqw:	times 4 db 0		; Sound queue write pointers
sndqr:	times 4 db 0		; Sound queue read pointers
eenvel:	times 4 db 0		; Envelope number
escale:	times 4 db 0		; Envelope scaler
epsect:	times 4 db 0		; Envelope pitch section
easect:	times 4 db 0		; Envelope amplitude section
epitch:	times 4 db 0		; Envelope pitch (frequency)
ecount:	times 4 db 0		; Envelope count
soundq:	times 4*SOUNDQL db 0	; Sound queue (four channels)
vduq:	times 10 db 0		; VDU queue (must precede 'queue')
queue:	db	0		; VDU queue status
;
kbdqw:	db	0		; Keyboard queue write pointer
kbdqr:	db	0		; Keyboard queue read pointer
evtqw:	db	0		; Event queue write pointer
evtqr:	db	0		; Event queue read pointer
keyexp:	db	0		; *KEY character counter
;
	align	4,db 0
;
; ------ End of initialised variables ------
;
datend:
;
;The following locations are NOT initialised when program is RUN
;(but are guaranteed to be zero on initial execution).
;
sizex:	dd	0		; Total width of client area
sizey:	dd	0		; Total height of client area
charx:	dd	0		; Average character width
chary:	dd	0		; Average character height
prchx:	dd	0		; Average character width (printer)
prchy:	dd	0		; Average character height (printer)
paperl:	dd	0		; Printer left edge
paperr:	dd	0		; Printer right edge
papert:	dd	0		; Printer top edge
paperb:	dd	0		; Printer bottom edge
prntx:	dd	0		; Horizontal printing position
prnty:	dd	0		; Vertical printing position
;
; ------ End of VDU variables ------
;
lastick:dd	0		; To check for TickCount wraparound
timoff:	dd	0		; Offset to add to TickCount
sacc:	times 4	dd 0		; Sound accumulators (not initialised)
smix:	times 4	dd 0		; Stereo mix
elevel:	times 4 db 0		; Envelope level (amplitude)
;
;The following variables are organised as a linked-list at
;sysvar, for access via 'system variables' starting with @:
;
	align	4,db 0
;
sysvar:	dd	link1 - sysvar
	db	'wparam%',0
	checkalign
wParam:	dd	0		; Saved wParam for ON xxxx interrupt
;
link3:	dd	link4 - link3
	db	'lparam%',0
	checkalign
lParam:	dd	0		; Saved lParam for ON xxxx interrupt
;
	db	0		; Padding
link23:	dd	link24 - link23
	db	'ispal%',0
	checkalign
bPaletted: dd	0		; Paletted display flag (BOOL)
;
	times 7	db 0		; Padding
link1:	dd	link3 - link1
	db	'memhdc%%',0    ; n.b. aliased to @memhdc%
	checkalign
memhdc:	dd	0		; Shadow screen device context
	dd	0		; 64-bit handle
;
	times 7	db 0		; Padding
link9:	dd	link10 - link9
	db	'msg%',0
	checkalign
iMsg:	dd	0		; Saved iMsg for ON xxxx interrupt
;
	db	0		; Padding
link4:	dd	link5 - link4
	db	'hwnd%%',0	; n.b. aliased to @hwnd%
	checkalign
hwndProg: dd	0		; Handle for program window
	dd	0		; 64-bit handle
;
	times 5	db 0		; Padding
link12:	dd	link13 - link12
	db	'flags%',0
	checkalign
tempo:	db	0		; *TEMPO value
sysflg:	db	0		; *SYS flags
reflag:	db	0		; *REFRESH flags
flags:	db	0		; Boolean flags (byte) @ 3FBH
;
	times 7	db 0		; Padding
link16:	dd	link17 - link16
	db	'chrmap%%',0	; n.b. aliased to @chrmap%
	checkalign
chrmap:	dd	0
	dd	0		; 64-bit pointer
;
	times 5	db 0		; Padding
link5:	dd	link6 - link5
	db	'hpal%%',0
	checkalign
	dq	palette		; Colour palette
;
	times 6	db 0		; Padding
link10:	dd	link11 - link10
	db	'vdu%%',0
	checkalign
	dq	vduvar		; Pointer to VDU variables
;
	times 6	db 0		; Padding
link00:	dd	0		; End of list
	db	'fn%%(',0
	checkalign
	dq	fnarr		; Pointer to function array
;
	dw	0		; Padding
link11:	dd	link12 - link11
	db	'platform%',0
	checkalign
platform: dd	0		; SDL version & OS
;
	dd	0		; Padding
link6:	dd	link7 - link6
	db	'ox%',0	
	checkalign
offsetx:dd	0		; x-offset memhdc->hwnd
;
	dd	0		; Padding
link7:	dd	link8 - link7
	db	'oy%',0	 
	checkalign
offsety:dd	0		; y-offset memhdc->hwnd
;
	times 3	db 0		; Padding
link17:	dd	link18 - link17
	db	'dir$',0
	checkalign
diradr:	dd	0		; Program directory address
dirlen:	dd	0		; Program directory length
;
	times 7	db 0		; Padding
link18:	dd	link19 - link18
	db	'lib$',0
	checkalign
libadr:	dd	0		; Library directory address
liblen:	dd	0		; Library directory length
;
	times 6	db 0		; Padding
link24:	dd	link25 - link24
	db	'panx%',0
	checkalign
panx:	dd	0		; Horizontal pan
;
	times 3	db 0		; Padding
link19:	dd	link20 - link19
	db	'cmd$',0
	checkalign
cmdadr:	dd	0		; Command line address
cmdlen:	dd	0		; Command line length
;
	times 7	db 0		; Padding
link20:	dd	link21 - link20
	db	'usr$',0
	checkalign
usradr:	dd	0		; User directory address
usrlen:	dd	0		; User directory length
;
	times 6	db 0		; Padding
link25:	dd	link26 - link25
	db	'pany%',0
	checkalign
pany:	dd	0		; Vertical pan
;
	times 3	db 0		; Padding
link21:	dd	link22 - link21
	db	'tmp$',0
	checkalign
tmpadr:	dd	0		; Temp directory address
tmplen:	dd	0		; Temp directory length
;
	times 7	db 0		; Padding
link22:	dd	link23 - link22
	db	'vdu{',0
	checkalign
	dq	vdufmt		; Structure format address 
	dq	hrect		; Structure data address
;
	times 6	db 0		; Padding
link14:	dd	link15 - link14
	db	'zoom%',0
	checkalign
zoom:	dd	0
;
	times 7	db 0		; Padding
link8:	dd	link9 - link8
	db	'hfile%%(',0
	checkalign
	dq	farray		; Pointer to file handles array
;
	times 5	db 0		; Padding
link26:	dd	link27 - link26
	db	'brkpt%',0
	checkalign
breakpt:dd	0		; Breakpoint (bottom of range)
;
	times 3	db 0		; Padding
link15:	dd	link16 - link15
	db	'hwo%',0
	checkalign
hwo:	dd	0		; Handle for wave output
;
	db	0		; Padding
link27:	dd	link28 - link27
	db	'brkhi%',0
	checkalign
breakhi:dd	0		; Breakpoint (top of range)
;
	dw	0		; Padding
link28:	dd	link29 - link28
	db	'size{',0	; V6.1 Member name
	checkalign
	dq	ptfmt		; V6.1 Format address
	dq	sizex		; V6.1 Data offset
;
	times 6	db 0		; Padding
link29:	dd	link00 - link29
	db	'char{',0	; V6.1 Member name
	checkalign
	dq	ptfmt		; V6.1 Format address
	dq	charx		; V6.1 Data offset
;
	dd	0		; Padding
link13:	dd	link14 - link13
	db	'cache%%',0
	checkalign
	dq	TTFcache	; Font cache
;
; Structure @vdu{o{x%,y%}, l{x%,y%}, p{x%,y%}, tl%, tr%, tt%, tb%,
;                d{x%,y%}, c{x%,y%}, hf%%, hr%%,
;                g{a&,b&,c&,d&}, t{a&,b&,c&,d&}, m{a&,b&,c&,d&}}
;
	times 5	db 0		; Padding
vdufmt:	dd	sndqw-hrect	; Total length (bytes)
vlnk00:	dd	vlnk01 - vlnk00	; Link to next
	db	'o{',0		; Member name
	checkalign
	dq	ptfmt
	dq	origx-hrect	; Data offset
;
	db	0		; Padding
vlnk01:	dd	vlnk02 - vlnk01
	db	'l{',0		; Member name
	checkalign
	dq	ptfmt
	dq	lastx-hrect	; Data offset
;
	db	0		; Padding
vlnk02:	dd	vlnk03 - vlnk02
	db	'p{',0		; Member name
	checkalign
	dq	ptfmt
	dq	prevx-hrect	; Data offset
;
vlnk03:	dd	vlnk04 - vlnk03
	db	'tl%',0		; Member name
	checkalign
	dd	textwl-hrect	; Data offset
;
	dd	0		; Padding
vlnk04:	dd	vlnk05 - vlnk04
	db	'tr%',0		; Member name
	checkalign
	dd	textwr-hrect	; Data offset
;
	dd	0		; Padding
vlnk05:	dd	vlnk06 - vlnk05
	db	'tt%',0		; Member name
	checkalign
	dd	textwt-hrect	; Data offset
;
	dd	0		; Padding
vlnk06:	dd	vlnk07 - vlnk06
	db	'tb%',0		; Member name
	checkalign
	dd	textwb-hrect	; Data offset
;
	times 5	db 0		; Padding
vlnk07:	dd	vlnk08 - vlnk07
	db	'd{',0		; Member name
	checkalign
	dq	ptfmt
	dq	pixelx-hrect	; Data offset
;
	db	0		; Padding
vlnk08:	dd	vlnk09 - vlnk08
	db	'c{',0		; Member name
	checkalign
	dq	ptfmt
	dq	textx-hrect	; Data offset
;
	times 7	db 0		; Padding
vlnk09:	dd	vlnk10 - vlnk09
	db	'hf%%',0	; Member name
	checkalign
	dd	hfont-hrect	; Data offset
;
	times 3	db 0		; Padding
vlnk10:	dd	vlnk11 - vlnk10
	db	'hr%%',0	; Member name
	checkalign
	dd	hrect-hrect	; Data offset
;
	times 5	db 0		; Padding
vlnk11:	dd	vlnk12 - vlnk11
	db	'g{',0		; Member name
	checkalign
	dq	b4fmt
	dq	forgnd-hrect	; Data offset
;
	db	0		; Padding
vlnk12:	dd	vlnk13 - vlnk12
	db	't{',0		; Member name
	checkalign
	dq	b4fmt
	dq	cursa-hrect	; Data offset
;
	db	0		; Padding
vlnk13:	dd	vlnk14 - vlnk13
	db	'm{',0		; Member name
	checkalign
	dq	b4fmt
	dq	modeno-hrect	; Data offset
;
	db	0		; Padding
vlnk14:	dd	0
	db	'w{',0		; V6.1 Member name
	checkalign
	dq	b4fmt		; V6.1 Format address
	dq	cursx-hrect	; V6.1 Data offset
;
	SEGMENT .text
;
bbcfont:
	DB	00H,00H,00H,00H,00H,00H,00H,00H		;NUL
	DB	07EH,081H,0A5H,081H,0BDH,099H,081H,07EH	;SOH
	DB	07EH,0FFH,0DBH,0FFH,0C3H,0E7H,0FFH,07EH	;STX
	DB	06CH,0FEH,0FEH,0FEH,07CH,038H,010H,00H	;ETX
	DB	010H,038H,07CH,0FEH,07CH,038H,010H,00H	;EOT
	DB	010H,038H,038H,0D6H,0FEH,0D6H,010H,038H	;ENQ
	DB	010H,038H,07CH,0FEH,0FEH,0FEH,038H,07CH	;ACK
	DB	00H,00H,018H,03CH,03CH,018H,00H,00H	;BEL
	DB	0FFH,0FFH,0E7H,0C3H,0C3H,0E7H,0FFH,0FFH	;BS
	DB	00H,03CH,066H,042H,042H,066H,03CH,00H	;HT
	DB	0FFH,0C3H,099H,0BDH,0BDH,099H,0C3H,0FFH	;LF
	DB	0FH,07H,0FH,07DH,0CCH,0CCH,0CCH,078H	;VT
	DB	03CH,066H,066H,066H,03CH,018H,07EH,018H	;FF
	DB	03FH,033H,03FH,030H,030H,070H,0F0H,0E0H	;CR
	DB	07FH,063H,07FH,063H,063H,067H,0E6H,0C0H	;SO
	DB	099H,05AH,03CH,0E7H,0E7H,03CH,05AH,099H	;SI
	DB	080H,0E0H,0F8H,0FEH,0F8H,0E0H,080H,00H	;DLE
	DB	02H,0EH,03EH,0FEH,03EH,0EH,02H,00H	;DC1
	DB	018H,03CH,07EH,018H,018H,07EH,03CH,018H	;DC2
	DB	066H,066H,066H,066H,066H,00H,066H,00H	;DC3
	DB	07FH,0DBH,0DBH,07BH,01BH,01BH,01BH,00H	;DC4
	DB	03EH,063H,038H,06CH,06CH,038H,0CCH,078H	;NAK
	DB	00H,00H,00H,00H,07EH,07EH,07EH,00H	;SYN
	DB	018H,03CH,07EH,018H,07EH,03CH,018H,0FFH	;ETB
	DB	018H,03CH,07EH,018H,018H,018H,018H,00H	;CAN
	DB	018H,018H,018H,018H,07EH,03CH,018H,00H	;EM
	DB	00H,018H,0CH,0FEH,0CH,018H,00H,00H	;SUB
	DB	00H,030H,060H,0FEH,060H,030H,00H,00H	;ESC
	DB	00H,00H,0C0H,0C0H,0C0H,0FEH,00H,00H	;FS
	DB	00H,024H,066H,0FFH,066H,024H,00H,00H	;GS
	DB	00H,018H,03CH,07EH,0FFH,0FFH,00H,00H	;RS
	DB	00H,0FFH,0FFH,07EH,03CH,018H,00H,00H	;US
	DB	00H,00H,00H,00H,00H,00H,00H,00H		;" "
	DB	030H,030H,030H,030H,030H,00H,030H,00H	;"!"
	DB	06CH,06CH,06CH,00H,00H,00H,00H,00H	;"""
	DB	06CH,06CH,0FEH,06CH,0FEH,06CH,06CH,00H	;"#"
	DB	018H,07EH,0D0H,07CH,016H,0FCH,030H,00H	;"$"
	DB	0C0H,0CCH,018H,030H,060H,0CCH,0CH,00H	;"%"
	DB	038H,06CH,038H,076H,0DCH,0CCH,076H,00H	;"&"
	DB	018H,030H,060H,00H,00H,00H,00H,00H	;"'"
	DB	018H,030H,060H,060H,060H,030H,018H,00H	;"("
	DB	060H,030H,018H,018H,018H,030H,060H,00H	;")"
	DB	00H,06CH,038H,0FEH,038H,06CH,00H,00H	;"*"
	DB	00H,030H,030H,0FCH,030H,030H,00H,00H	;"+"
	DB	00H,00H,00H,00H,00H,030H,030H,060H	;","
	DB	00H,00H,00H,0FCH,00H,00H,00H,00H	;"-"
	DB	00H,00H,00H,00H,00H,030H,030H,00H	;"."
	DB	00H,0CH,018H,030H,060H,0C0H,00H,00H	;"/"
	DB	078H,0CCH,0DCH,0FCH,0ECH,0CCH,078H,00H	;"0"
	DB	030H,070H,030H,030H,030H,030H,0FCH,00H	;"1"
	DB	078H,0CCH,0CH,018H,030H,060H,0FCH,00H	;"2"
	DB	078H,0CCH,0CH,038H,0CH,0CCH,078H,00H	;"3"
	DB	018H,038H,078H,0D8H,0FCH,018H,018H,00H	;"4"
	DB	0FCH,0C0H,0F8H,0CH,0CH,0CCH,078H,00H	;"5"
	DB	038H,060H,0C0H,0F8H,0CCH,0CCH,078H,00H	;"6"
	DB	0FCH,0CH,018H,030H,060H,060H,060H,00H	;"7"
	DB	078H,0CCH,0CCH,078H,0CCH,0CCH,078H,00H	;"8"
	DB	078H,0CCH,0CCH,07CH,0CH,018H,070H,00H	;"9"
	DB	00H,00H,030H,030H,00H,030H,030H,00H	;":"
	DB	00H,00H,030H,030H,00H,030H,030H,060H	;";"
	DB	018H,030H,060H,0C0H,060H,030H,018H,00H	;"<"
	DB	00H,00H,0FCH,00H,0FCH,00H,00H,00H	;"="
	DB	060H,030H,018H,0CH,018H,030H,060H,00H	;">"
	DB	078H,0CCH,018H,030H,030H,00H,030H,00H	;"?"
	DB	078H,0CCH,0DCH,0D4H,0DCH,0C0H,078H,00H	;"@"
	DB	078H,0CCH,0CCH,0FCH,0CCH,0CCH,0CCH,00H	;"A"
	DB	0F8H,0CCH,0CCH,0F8H,0CCH,0CCH,0F8H,00H	;"B"
	DB	078H,0CCH,0C0H,0C0H,0C0H,0CCH,078H,00H	;"C"
	DB	0F0H,0D8H,0CCH,0CCH,0CCH,0D8H,0F0H,00H	;"D"
	DB	0FCH,0C0H,0C0H,0F8H,0C0H,0C0H,0FCH,00H	;"E"
	DB	0FCH,0C0H,0C0H,0F8H,0C0H,0C0H,0C0H,00H	;"F"
	DB	078H,0CCH,0C0H,0DCH,0CCH,0CCH,078H,00H	;"G"
	DB	0CCH,0CCH,0CCH,0FCH,0CCH,0CCH,0CCH,00H	;"H"
	DB	0FCH,030H,030H,030H,030H,030H,0FCH,00H	;"I"
	DB	07CH,018H,018H,018H,018H,0D8H,070H,00H	;"J"
	DB	0CCH,0D8H,0F0H,0E0H,0F0H,0D8H,0CCH,00H	;"K"
	DB	0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0FCH,00H	;"L"
	DB	0C6H,0EEH,0FEH,0D6H,0D6H,0C6H,0C6H,00H	;"M"
	DB	0CCH,0CCH,0ECH,0FCH,0DCH,0CCH,0CCH,00H	;"N"
	DB	078H,0CCH,0CCH,0CCH,0CCH,0CCH,078H,00H	;"O"
	DB	0F8H,0CCH,0CCH,0F8H,0C0H,0C0H,0C0H,00H	;"P"
	DB	078H,0CCH,0CCH,0CCH,0DCH,078H,01CH,00H	;"Q"
	DB	0F8H,0CCH,0CCH,0F8H,0D8H,0CCH,0CCH,00H	;"R"
	DB	078H,0CCH,0C0H,078H,0CH,0CCH,078H,00H	;"S"
	DB	0FCH,030H,030H,030H,030H,030H,030H,00H	;"T"
	DB	0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,078H,00H	;"U"
	DB	0CCH,0CCH,0CCH,0CCH,0CCH,078H,030H,00H	;"V"
	DB	0C6H,0C6H,0D6H,0D6H,0FEH,0EEH,0C6H,00H	;"W"
	DB	0CCH,0CCH,078H,030H,078H,0CCH,0CCH,00H	;"X"
	DB	0CCH,0CCH,0CCH,078H,030H,030H,030H,00H	;"Y"
	DB	0FCH,0CH,018H,030H,060H,0C0H,0FCH,00H	;"Z"
	DB	0F8H,0C0H,0C0H,0C0H,0C0H,0C0H,0F8H,00H	;"["
	DB	00H,0C0H,060H,030H,018H,0CH,00H,00H	;"\"
	DB	07CH,0CH,0CH,0CH,0CH,0CH,07CH,00H	;"]"
	DB	010H,038H,06CH,0C6H,00H,00H,00H,00H	;"^"
	DB	00H,00H,00H,00H,00H,00H,00H,0FFH	;"_"
	DB	060H,030H,018H,00H,00H,00H,00H,00H	;"`"
	DB	00H,00H,078H,0CH,07CH,0CCH,07CH,00H	;"a"
	DB	0C0H,0C0H,0F8H,0CCH,0CCH,0CCH,0F8H,00H	;"b"
	DB	00H,00H,078H,0CCH,0C0H,0CCH,078H,00H	;"c"
	DB	0CH,0CH,07CH,0CCH,0CCH,0CCH,07CH,00H	;"d"
	DB	00H,00H,078H,0CCH,0FCH,0C0H,078H,00H	;"e"
	DB	038H,060H,060H,0F8H,060H,060H,060H,00H	;"f"
	DB	00H,00H,07CH,0CCH,0CCH,07CH,0CH,078H	;"g"
	DB	0C0H,0C0H,0F8H,0CCH,0CCH,0CCH,0CCH,00H	;"h"
	DB	030H,00H,070H,030H,030H,030H,078H,00H	;"i"
	DB	030H,00H,070H,030H,030H,030H,030H,0E0H	;"j"
	DB	0C0H,0C0H,0CCH,0D8H,0F0H,0D8H,0CCH,00H	;"k"
	DB	070H,030H,030H,030H,030H,030H,078H,00H	;"l"
	DB	00H,00H,06CH,0FEH,0D6H,0D6H,0C6H,00H	;"m"
	DB	00H,00H,0F8H,0CCH,0CCH,0CCH,0CCH,00H	;"n"
	DB	00H,00H,078H,0CCH,0CCH,0CCH,078H,00H	;"o"
	DB	00H,00H,0F8H,0CCH,0CCH,0F8H,0C0H,0C0H	;"p"
	DB	00H,00H,07CH,0CCH,0CCH,07CH,0CH,0EH	;"q"
	DB	00H,00H,0D8H,0ECH,0C0H,0C0H,0C0H,00H	;"r"
	DB	00H,00H,07CH,0C0H,078H,0CH,0F8H,00H	;"s"
	DB	060H,060H,0F8H,060H,060H,060H,038H,00H	;"t"
	DB	00H,00H,0CCH,0CCH,0CCH,0CCH,07CH,00H	;"u"
	DB	00H,00H,0CCH,0CCH,0CCH,078H,030H,00H	;"v"
	DB	00H,00H,0C6H,0D6H,0D6H,0FEH,06CH,00H	;"w"
	DB	00H,00H,0CCH,078H,030H,078H,0CCH,00H	;"x"
	DB	00H,00H,0CCH,0CCH,0CCH,07CH,0CH,078H	;"y"
	DB	00H,00H,0FCH,018H,030H,060H,0FCH,00H	;"z"
	DB	018H,030H,030H,0E0H,030H,030H,018H,00H	;"{"
	DB	030H,030H,030H,00H,030H,030H,030H,00H	;"|"
	DB	060H,030H,030H,01CH,030H,030H,060H,00H	;"}"
	DB	076H,0DCH,00H,00H,00H,00H,00H,00H	;"~"
	DB	00H,010H,038H,06CH,0C6H,0C6H,0FEH,00H	;DEL
	DB	03CH,062H,0F8H,060H,0F8H,062H,03CH,000H ; &80 euro symbol
	DB	000H,07EH,07EH,07EH,07EH,07EH,07EH,000H ; &81 block (teletext)
	DB	000H,000H,000H,000H,000H,018H,018H,030H ; &82 single low quotation mark
	DB	000H,00CH,018H,018H,03CH,018H,018H,070H ; &83 small letter f with hook
	DB	000H,000H,000H,000H,000H,06CH,06CH,0D8H ; &84 double low quotation mark
	DB	000H,000H,000H,000H,000H,000H,054H,000H ; &85 horizontal ellipsis
	DB	018H,018H,07EH,018H,018H,018H,018H,000H ; &86 dagger
	DB	018H,018H,07EH,018H,018H,07EH,018H,018H ; &87 double dagger
	DB	010H,038H,06CH,000H,000H,000H,000H,000H ; &88 circumflex accent
	DB	0C6H,0CCH,018H,030H,060H,0DBH,01BH,000H ; &89 per mille
	DB	038H,07CH,0C6H,070H,01CH,0C6H,07CH,000H ; &8A capital S caron
	DB	000H,018H,030H,060H,030H,018H,000H,000H ; &8B left angle quotation mark
	DB	07EH,0D8H,0D8H,0DEH,0D8H,0D8H,07EH,000H ; &8C capital OE ligature
	DB	030H,078H,0FCH,030H,030H,030H,030H,000H ; &8D up arrow (teletext)
	DB	038H,0FEH,00CH,018H,030H,060H,0FEH,000H ; &8E capital Z caron
	DB	000H,020H,060H,0FEH,060H,020H,000H,000H ; &8F left arrow (teletext)
	DB	000H,008H,00CH,0FEH,00CH,008H,000H,000H ; &90 right arrow (teletext)
	DB	030H,030H,018H,000H,000H,000H,000H,000H ; &91 left single quotation mark
	DB	018H,018H,030H,000H,000H,000H,000H,000H ; &92 right single quotation mark
	DB	06CH,06CH,036H,000H,000H,000H,000H,000H ; &93 left double quotation mark
	DB	036H,036H,06CH,000H,000H,000H,000H,000H ; &94 right double quotation mark
	DB	000H,000H,018H,03CH,03CH,018H,000H,000H ; &95 bullet
	DB	000H,000H,000H,0FEH,000H,000H,000H,000H ; &96 en dash
	DB	000H,000H,000H,0FFH,000H,000H,000H,000H ; &97 em dash
	DB	036H,06CH,000H,000H,000H,000H,000H,000H ; &98 small tilde
	DB	0EAH,04EH,04AH,04AH,000H,000H,000H,000H ; &99 trade mark sign
	DB	06CH,038H,07CH,0C0H,078H,00CH,0F8H,000H ; &9A small S caron
	DB	000H,030H,018H,00CH,018H,030H,000H,000H ; &9B right angle quotation mark
	DB	000H,000H,07EH,0DBH,0DFH,0D8H,07FH,000H ; &9C small OE ligature
	DB	0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,000H ; &9D double line (teletext)
	DB	06CH,038H,07CH,018H,030H,060H,07CH,000H ; &9E small Z caron
	DB	0CCH,000H,0CCH,0CCH,078H,030H,030H,000H ; &9F capital Y diaeresis
	DB	000H,000H,000H,000H,000H,000H,000H,000H ;" "
	DB	018H,000H,018H,018H,018H,018H,018H,000H ;" "
	DB	000H,018H,07EH,0D8H,0D8H,07EH,018H,000H ;" "
	DB	038H,06CH,060H,0F0H,060H,066H,0FCH,000H ;" "
	DB	066H,03CH,066H,03CH,066H,000H,000H,000H ;" "
	DB	0C3H,066H,03CH,018H,03CH,018H,018H,000H ;" "
	DB	018H,018H,018H,000H,018H,018H,018H,000H ;" "
	DB	03CH,060H,03CH,066H,066H,03CH,006H,03CH ;" "
	DB	066H,000H,000H,000H,000H,000H,000H,000H ;" "
	DB	07EH,081H,09DH,0B1H,0B1H,09DH,081H,07EH ;" "
	DB	03CH,06CH,06CH,03EH,000H,07EH,000H,000H ;" "
	DB	000H,033H,066H,0CCH,066H,033H,000H,000H ;" "
	DB	000H,07EH,006H,006H,000H,000H,000H,000H ;" "
	DB	000H,000H,000H,03CH,000H,000H,000H,000H ;" "
	DB	07EH,081H,0B9H,0A5H,0B9H,0A5H,081H,07EH ;" "
	DB	03CH,000H,000H,000H,000H,000H,000H,000H ;" "
	DB	03CH,066H,03CH,000H,000H,000H,000H,000H ;" "
	DB	018H,018H,07EH,018H,018H,000H,07EH,000H ;" "
	DB	070H,018H,030H,060H,078H,000H,000H,000H ;" "
	DB	078H,00CH,018H,00CH,078H,000H,000H,000H ;" "
	DB	00CH,018H,030H,000H,000H,000H,000H,000H ;" "
	DB	000H,000H,066H,066H,066H,07CH,060H,0C0H ;" "
	DB	03EH,07AH,07AH,03AH,01AH,01AH,01AH,000H ;" "
	DB	000H,000H,000H,018H,000H,000H,000H,000H ;" "
	DB	000H,000H,000H,000H,000H,008H,018H,000H ;" "
	DB	030H,070H,030H,030H,030H,000H,000H,000H ;" "
	DB	038H,06CH,06CH,038H,000H,07CH,000H,000H ;" "
	DB	000H,0CCH,066H,033H,066H,0CCH,000H,000H ;" "
	DB	043H,0C6H,04CH,05AH,036H,06AH,0CFH,002H ;" "
	DB	040H,0C6H,04CH,05EH,033H,066H,0CCH,00FH ;" "
	DB	0C0H,023H,066H,02DH,0DBH,035H,067H,001H ;" "
	DB	018H,000H,018H,030H,060H,066H,03CH,000H ;" "
	DB	070H,000H,03CH,066H,07EH,066H,066H,000H ;" "
	DB	00EH,000H,03CH,066H,07EH,066H,066H,000H ;" "
	DB	018H,066H,000H,03CH,066H,07EH,066H,000H ;" "
	DB	076H,0DCH,000H,03CH,066H,07EH,066H,000H ;" "
	DB	066H,000H,03CH,066H,07EH,066H,066H,000H ;" "
	DB	018H,018H,000H,03CH,066H,07EH,066H,000H ;" "
	DB	03FH,06CH,0CCH,0FEH,0CCH,0CCH,0CFH,000H ;" "
	DB	03CH,066H,060H,060H,060H,066H,03CH,018H ;" "
	DB	070H,000H,07EH,060H,07CH,060H,07EH,000H ;" "
	DB	00EH,000H,07EH,060H,07CH,060H,07EH,000H ;" "
	DB	018H,066H,000H,0FEH,0F0H,0C0H,0FEH,000H ;" "
	DB	066H,000H,07EH,060H,07CH,060H,07EH,000H ;" "
	DB	070H,000H,07EH,018H,018H,018H,07EH,000H ;" "
	DB	00EH,000H,07EH,018H,018H,018H,07EH,000H ;" "
	DB	018H,066H,000H,07EH,018H,018H,07EH,000H ;" "
	DB	066H,000H,07EH,018H,018H,018H,07EH,000H ;" "
	DB	078H,06CH,066H,0F6H,066H,06CH,078H,000H ;" "
	DB	076H,0DCH,000H,0C6H,0F6H,0DEH,0C6H,000H ;" "
	DB	070H,000H,07CH,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	00EH,000H,07CH,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	018H,066H,000H,07CH,0C6H,0C6H,07CH,000H ;" "
	DB	076H,0DCH,000H,07CH,0C6H,0C6H,07CH,000H ;" "
	DB	066H,000H,07CH,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	000H,0C6H,06CH,038H,06CH,0C6H,000H,000H ;" "
	DB	03EH,066H,06EH,07EH,076H,066H,07CH,000H ;" "
	DB	070H,000H,0C6H,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	00EH,000H,0C6H,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	018H,066H,000H,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	066H,000H,0C6H,0C6H,0C6H,0C6H,07CH,000H ;" "
	DB	00EH,000H,066H,066H,03CH,018H,018H,000H ;" "
	DB	0C0H,0C0H,0FCH,0C6H,0FCH,0C0H,0C0H,000H ;" "
	DB	03CH,066H,066H,06CH,066H,066H,06CH,000H ;" "
	DB	070H,000H,03CH,006H,03EH,066H,03EH,000H ;" "
	DB	00EH,000H,03CH,006H,03EH,066H,03EH,000H ;" "
	DB	018H,066H,000H,03EH,066H,0C6H,07EH,000H ;" "
	DB	076H,0DCH,000H,03EH,066H,0C6H,07EH,000H ;" "
	DB	066H,000H,03CH,006H,03EH,066H,03EH,000H ;" "
	DB	018H,018H,000H,03EH,066H,0C6H,07EH,000H ;" "
	DB	000H,000H,07EH,01BH,07FH,0D8H,077H,000H ;" "
	DB	000H,000H,03CH,060H,060H,060H,03CH,018H ;" "
	DB	070H,000H,03CH,066H,07EH,060H,03CH,000H ;" "
	DB	00EH,000H,03CH,066H,07EH,060H,03CH,000H ;" "
	DB	018H,066H,000H,03CH,07EH,060H,03CH,000H ;" "
	DB	066H,000H,03CH,066H,07EH,060H,03CH,000H ;" "
	DB	070H,000H,038H,018H,018H,018H,03CH,000H ;" "
	DB	00EH,000H,038H,018H,018H,018H,03CH,000H ;" "
	DB	018H,066H,000H,038H,018H,018H,03CH,000H ;" "
	DB	066H,000H,038H,018H,018H,018H,03CH,000H ;" "
	DB	00CH,03EH,00CH,07CH,0CCH,0CCH,078H,000H ;" "
	DB	076H,0DCH,000H,07CH,066H,066H,066H,000H ;" "
	DB	070H,000H,03CH,066H,066H,066H,03CH,000H ;" "
	DB	00EH,000H,03CH,066H,066H,066H,03CH,000H ;" "
	DB	018H,066H,000H,03CH,066H,066H,03CH,000H ;" "
	DB	076H,0DCH,000H,03CH,066H,066H,03CH,000H ;" "
	DB	066H,000H,03CH,066H,066H,066H,03CH,000H ;" "
	DB	018H,018H,000H,07EH,000H,018H,018H,000H ;" "
	DB	000H,002H,07CH,0CEH,0D6H,0E6H,07CH,080H ;" "
	DB	070H,000H,066H,066H,066H,066H,03EH,000H ;" "
	DB	00EH,000H,066H,066H,066H,066H,03EH,000H ;" "
	DB	018H,066H,000H,066H,066H,066H,03EH,000H ;" "
	DB	066H,000H,066H,066H,066H,066H,03EH,000H ;" "
	DB	00EH,000H,066H,066H,066H,03EH,006H,03CH ;" "
	DB	060H,060H,07CH,066H,066H,07CH,060H,060H ;" "
	DB	066H,000H,066H,066H,066H,03EH,006H,03CH ;" "
;
ttxtfont:
	DW	00000H,00011H,00011H,00019H,00015H,00013H,00011H,00011H,08800H,08800H,08800H,08800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; NU
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,0F000H,08800H,08800H,0F000H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; AR
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; AG
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,08800H,08800H,05000H,02000H,02000H,02000H,02000H,00000H,00000H,00000H,00000H,00000H ; AY
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; AB
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,08800H,0D800H,0A800H,0A800H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; AM
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,07000H,08800H,08000H,08000H,08000H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; AC
	DW	00000H,0000EH,00011H,00011H,0001FH,00011H,00011H,00011H,08800H,08800H,08800H,0A800H,0A800H,0D800H,08800H,00000H,00000H,00000H,00000H,00000H ; AW
	DW	00000H,0001FH,00010H,00010H,0001EH,00010H,00010H,00010H,08000H,08000H,08000H,08000H,08000H,08000H,0F800H,00000H,00000H,00000H,00000H,00000H ; FL
	DW	00000H,0000EH,00011H,00010H,0000EH,00001H,00011H,0000EH,0F800H,02000H,02000H,02000H,02000H,02000H,02000H,00000H,00000H,00000H,00000H,00000H ; ST
	DW	00000H,0001FH,00010H,00010H,0001EH,00010H,00010H,0001FH,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; EB
	DW	00000H,0000EH,00011H,00010H,0000EH,00001H,00011H,0000EH,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; SB
	DW	00000H,00011H,00011H,00019H,00015H,00013H,00011H,00011H,08800H,08800H,08800H,0F800H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; NH
	DW	00000H,0001CH,00012H,00011H,00011H,00011H,00012H,0001CH,08800H,08800H,08800H,0F800H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; DH
	DW	00000H,0000EH,00011H,00010H,0000EH,00001H,00011H,0000EH,07000H,08800H,08800H,08800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; SO
	DW	00000H,0000EH,00011H,00010H,0000EH,00001H,00011H,0000EH,07000H,02000H,02000H,02000H,02000H,02000H,07000H,00000H,00000H,00000H,00000H,00000H ; SI
	DW	00000H,0001CH,00012H,00011H,00011H,00011H,00012H,0001CH,08000H,08000H,08000H,08000H,08000H,08000H,0F800H,00000H,00000H,00000H,00000H,00000H ; DL
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,0F000H,08800H,08800H,0F000H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; GR
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; GG
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,08800H,08800H,05000H,02000H,02000H,02000H,02000H,00000H,00000H,00000H,00000H,00000H ; GY
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; GB
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,08800H,0D800H,0A800H,0A800H,08800H,08800H,08800H,00000H,00000H,00000H,00000H,00000H ; GM
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,07000H,08800H,08000H,08000H,08000H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; GC
	DW	00000H,0000EH,00011H,00010H,00013H,00011H,00011H,0000EH,08800H,08800H,08800H,0A800H,0A800H,0D800H,08800H,00000H,00000H,00000H,00000H,00000H ; GW
	DW	00000H,0000EH,00011H,00010H,00010H,00010H,00011H,0000EH,0E000H,09000H,08800H,08800H,08800H,09000H,0E000H,00000H,00000H,00000H,00000H,00000H ; CD
	DW	00000H,0000EH,00011H,00010H,00010H,00010H,00011H,0000EH,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; CG
	DW	00000H,0000EH,00011H,00010H,0000EH,00001H,00011H,0000EH,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; SG
	DW	00000H,0001FH,00010H,00010H,0001EH,00010H,00010H,0001FH,07000H,08800H,08000H,07000H,00800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; ES
	DW	00000H,0001EH,00011H,00011H,0001EH,00011H,00011H,0001EH,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; BB
	DW	00000H,00011H,00011H,00019H,00015H,00013H,00011H,00011H,0F000H,08800H,08800H,0F000H,08800H,08800H,0F000H,00000H,00000H,00000H,00000H,00000H ; NB
	DW	00000H,00011H,00011H,00011H,0001FH,00011H,00011H,00011H,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; HG
	DW	00000H,0001EH,00011H,00011H,0001EH,00011H,00011H,00011H,07000H,08800H,08000H,09800H,08800H,08800H,07000H,00000H,00000H,00000H,00000H,00000H ; RG
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "!"
	DW	00000H,0700EH,0700EH,0700EH,0700EH,0700EH,0700EH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; """
	DW	00000H,0700EH,0700EH,0700EH,0700EH,0FC3FH,0FC3FH,0700EH,0700EH,0FC3FH,0FC3FH,0700EH,0700EH,0700EH,0700EH,00000H,00000H,00000H,00000H,00000H ; "#"
	DW	00000H,0F00FH,0F81FH,09C39H,08C31H,08031H,08039H,0F01FH,0F80FH,09C01H,08C01H,08C31H,09C39H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "$"
	DW	00000H,0003CH,00C3CH,01C3CH,0383CH,07000H,0E000H,0C001H,08003H,00007H,0000EH,03C1CH,03C38H,03C30H,03C00H,00000H,00000H,00000H,00000H,00000H ; "%"
	DW	00000H,0000EH,0001FH,0803BH,08031H,0803BH,0001FH,0000EH,0001FH,08C3BH,0DC31H,0F830H,0F838H,0DC1FH,08C0FH,00000H,00000H,00000H,00000H,00000H ; "&"
	DW	00000H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "'"
	DW	00000H,06000H,0E000H,0C001H,08003H,00007H,00006H,00006H,00006H,00006H,00007H,08003H,0C001H,0E000H,06000H,00000H,00000H,00000H,00000H,00000H ; "("
	DW	00000H,00006H,00007H,08003H,0C001H,0E000H,06000H,06000H,06000H,06000H,0E000H,0C001H,08003H,00007H,00006H,00000H,00000H,00000H,00000H,00000H ; ")"
	DW	00000H,08001H,08001H,08C31H,09C39H,0F81FH,0F00FH,08001H,08001H,0F00FH,0F81FH,09C39H,08C31H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "*"
	DW	00000H,00000H,00000H,08001H,08001H,08001H,08001H,0F81FH,0F81FH,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "+"
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,08001H,08001H,08001H,08003H,00007H,00006H,00000H,00000H,00000H ; ","
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "-"
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "."
	DW	00000H,00000H,00C00H,01C00H,03800H,07000H,0E000H,0C001H,08003H,00007H,0000EH,0001CH,00038H,00030H,00000H,00000H,00000H,00000H,00000H,00000H ; "/"
	DW	00000H,0C003H,0E007H,0700EH,0381CH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0381CH,0700EH,0E007H,0C003H,00000H,00000H,00000H,00000H,00000H ; "0"
	DW	00000H,08001H,08001H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "1"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C00H,01C00H,0F803H,0F007H,0000EH,0001CH,00038H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; "2"
	DW	00000H,0FC3FH,0FC3FH,01C00H,03800H,07000H,0E000H,0F801H,0FC01H,00C00H,00C00H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "3"
	DW	00000H,07000H,0F000H,0F001H,0B003H,03007H,0300EH,0301CH,03038H,0FC3FH,0FC3FH,03000H,03000H,03000H,03000H,00000H,00000H,00000H,00000H,00000H ; "4"
	DW	00000H,0FC3FH,0FC3FH,00030H,00030H,0F03FH,0F83FH,01C00H,00C00H,00C00H,00C00H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "5"
	DW	00000H,0F001H,0F007H,0000FH,0001CH,00038H,00030H,0F03FH,0F83FH,01C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "6"
	DW	00000H,0FC3FH,0FC3FH,00C00H,01C00H,03800H,07000H,0E000H,0C001H,08003H,00007H,00006H,00006H,00006H,00006H,00000H,00000H,00000H,00000H,00000H ; "7"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,01C38H,0F81FH,0F81FH,01C38H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "8"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,01C00H,03800H,0F000H,0E00FH,0800FH,00000H,00000H,00000H,00000H,00000H ; "9"
	DW	00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; ":"
	DW	00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,08001H,08001H,08001H,08003H,00007H,00006H,00000H,00000H,00000H ; ";"
	DW	00000H,06000H,0E000H,0C001H,08003H,00007H,0000EH,0001CH,0001CH,0000EH,00007H,08003H,0C001H,0E000H,06000H,00000H,00000H,00000H,00000H,00000H ; "<"
	DW	00000H,00000H,00000H,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "="
	DW	00000H,00006H,00007H,08003H,0C001H,0E000H,07000H,03800H,03800H,07000H,0E000H,0C001H,08003H,00007H,00006H,00000H,00000H,00000H,00000H,00000H ; ">"
	DW	00000H,0E00FH,0F01FH,03838H,01830H,03800H,07000H,0E000H,0C001H,08001H,08001H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "?"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,0FC31H,0FC31H,08C31H,08C31H,0FC31H,0FC31H,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "@"
	DW	00000H,08001H,0C003H,0E007H,0700EH,0381CH,01C38H,00C30H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "A"
	DW	00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,01C30H,0F83FH,0F83FH,01C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00000H,00000H,00000H,00000H,00000H ; "B"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00030H,00030H,00030H,00030H,00030H,00030H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "C"
	DW	00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00000H,00000H,00000H,00000H,00000H ; "D"
	DW	00000H,0FC3FH,0FC3FH,00030H,00030H,00030H,00030H,0F03FH,0F03FH,00030H,00030H,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; "E"
	DW	00000H,0FC3FH,0FC3FH,00030H,00030H,00030H,00030H,0F03FH,0F03FH,00030H,00030H,00030H,00030H,00030H,00030H,00000H,00000H,00000H,00000H,00000H ; "F"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00030H,00030H,00030H,00030H,03C30H,03C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; "G"
	DW	00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "H"
	DW	00000H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "I"
	DW	00000H,00C00H,00C00H,00C00H,00C00H,00C00H,00C00H,00C00H,00C00H,00C00H,00C00H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "J"
	DW	00000H,01830H,03830H,07030H,0E030H,0C031H,08033H,0003FH,0003FH,08033H,0C031H,0E030H,07030H,03830H,01830H,00000H,00000H,00000H,00000H,00000H ; "K"
	DW	00000H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; "L"
	DW	00000H,00C30H,00C30H,01C38H,03C3CH,07C3EH,0EC37H,0CC33H,08C31H,08C31H,00C30H,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "M"
	DW	00000H,00C30H,00C30H,00C38H,00C3CH,00C3EH,00C37H,08C33H,0CC31H,0EC30H,07C30H,03C30H,01C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "N"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "O"
	DW	00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00030H,00030H,00030H,00030H,00030H,00030H,00000H,00000H,00000H,00000H,00000H ; "P"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,00C30H,0CC30H,0EC30H,07830H,03838H,0FC1FH,0CC0FH,00000H,00000H,00000H,00000H,00000H ; "Q"
	DW	00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,0C031H,0E030H,07030H,03830H,01C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "R"
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00030H,00038H,0F01FH,0F80FH,01C00H,00C00H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "S"
	DW	00000H,0FC3FH,0FC3FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "T"
	DW	00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "U"
	DW	00000H,00C30H,00C30H,00C30H,00C30H,01C38H,01818H,0381CH,0300CH,0700EH,0E007H,0C003H,0C003H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "V"
	DW	00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,08C31H,08C31H,08C31H,08C31H,08C31H,0FC3FH,0F81FH,0700EH,00000H,00000H,00000H,00000H,00000H ; "W"
	DW	00000H,00C30H,00C30H,01C38H,0381CH,0700EH,0E007H,0C003H,0C003H,0E007H,0700EH,0381CH,01C38H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "X"
	DW	00000H,00C30H,00C30H,01C38H,0381CH,0700EH,0E007H,0C003H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "Y"
	DW	00000H,0FC3FH,0FC3FH,01C00H,03800H,07000H,0E000H,0C001H,08003H,00007H,0000EH,0001CH,00038H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; "Z"
	DW	00000H,0E007H,0E007H,00006H,00006H,00006H,00006H,00006H,00006H,00006H,00006H,00006H,00006H,0E007H,0E007H,00000H,00000H,00000H,00000H,00000H ; "["
	DW	00000H,00000H,00030H,00038H,0001CH,0000EH,00007H,08003H,0C001H,0E000H,07000H,03800H,01C00H,00C00H,00000H,00000H,00000H,00000H,00000H,00000H ; "\"
	DW	00000H,0E007H,0E007H,06000H,06000H,06000H,06000H,06000H,06000H,06000H,06000H,06000H,06000H,0E007H,0E007H,00000H,00000H,00000H,00000H,00000H ; "]"
	DW	00000H,08001H,0C003H,0E007H,0700EH,0381CH,01818H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "^"
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,0FFFFH,0FFFFH,00000H,00000H ; "_"
	DW	00000H,00006H,00007H,08003H,0C001H,0E000H,06000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "`"
	DW	00000H,00000H,00000H,00000H,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC1FH,0FC3FH,00C30H,00C30H,0FC3FH,0FC1FH,00000H,00000H,00000H,00000H,00000H ; "a"
	DW	00000H,00030H,00030H,00030H,00030H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00000H,00000H,00000H,00000H,00000H ; "b"
	DW	00000H,00000H,00000H,00000H,00000H,0FC0FH,0FC1FH,00038H,00030H,00030H,00030H,00030H,00038H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; "c"
	DW	00000H,00C00H,00C00H,00C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; "d"
	DW	00000H,00000H,00000H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "e"
	DW	00000H,03000H,0F000H,0C001H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "f"
	DW	00000H,00000H,00000H,00000H,00000H,0FC0FH,0FC1FH,00C38H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,01C00H,0F80FH,0F00FH,00000H ; "g"
	DW	00000H,00030H,00030H,00030H,00030H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "h"
	DW	00000H,08001H,08001H,00000H,00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "i"
	DW	00000H,08001H,08001H,00000H,00000H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08003H,0000FH,0000CH,00000H ; "j"
	DW	00000H,0000CH,0000CH,0000CH,0180CH,0380CH,0700CH,0E00CH,0C00FH,0800FH,0C00DH,0E00CH,0700CH,0380CH,0180CH,00000H,00000H,00000H,00000H,00000H ; "k"
	DW	00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "l"
	DW	00000H,00000H,00000H,00000H,00000H,0303EH,0F83FH,0FC33H,08C31H,08C31H,08C31H,08C31H,08C31H,08C31H,08C31H,00000H,00000H,00000H,00000H,00000H ; "m"
	DW	00000H,00000H,00000H,00000H,00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; "n"
	DW	00000H,00000H,00000H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; "o"
	DW	00000H,00000H,00000H,00000H,00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00030H,00030H,00030H,00030H,00000H ; "p"
	DW	00000H,00000H,00000H,00000H,00000H,0FC0FH,0FC1FH,00C38H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,00C00H,00C00H,00C00H,00000H ; "q"
	DW	00000H,00000H,00000H,00000H,00000H,0F819H,0F81BH,0001FH,0001EH,00018H,00018H,00018H,00018H,00018H,00018H,00000H,00000H,00000H,00000H,00000H ; "r"
	DW	00000H,00000H,00000H,00000H,00000H,0FC0FH,0FC1FH,00030H,00030H,0F01FH,0F80FH,00C00H,00C00H,0F83FH,0F03FH,00000H,00000H,00000H,00000H,00000H ; "s"
	DW	00000H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,0C001H,0F000H,03000H,00000H,00000H,00000H,00000H,00000H ; "t"
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; "u"
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,00C30H,00C30H,01C38H,01818H,0381CH,0700EH,0E007H,0C003H,08001H,00000H,00000H,00000H,00000H,00000H ; "v"
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,00C30H,00C30H,00C30H,08C31H,08C31H,08C31H,0FC3FH,0F81FH,0700EH,00000H,00000H,00000H,00000H,00000H ; "w"
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,01C38H,0781EH,0F00FH,0C003H,0C003H,0F00FH,0781EH,01C38H,00C30H,00000H,00000H,00000H,00000H,00000H ; "x"
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,01C00H,0F80FH,0F00FH,00000H ; "y"
	DW	00000H,00000H,00000H,00000H,00000H,0FC3FH,0FC3FH,03800H,07000H,0E001H,08007H,0000EH,0001CH,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; "z"
	DW	00000H,0F000H,0F001H,08001H,08001H,08003H,00003H,0000FH,0000FH,00003H,08003H,08001H,08001H,0F000H,0F000H,00000H,00000H,00000H,00000H,00000H ; "{"
	DW	00000H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; "|"
	DW	00000H,0000FH,0800FH,08001H,08001H,0C001H,0C000H,0F000H,0F000H,0C000H,0C001H,08001H,08001H,0000FH,0000FH,00000H,00000H,00000H,00000H,00000H ; "}"
	DW	00000H,0000EH,00C1FH,0DC3BH,0F831H,07000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; "~"
	DW	00000H,08001H,0C003H,0C003H,06006H,06006H,0300CH,0300CH,01818H,01818H,00C30H,00C30H,00C30H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; &7F DEL
	DW	00000H,0F003H,0F807H,01C0EH,00C0CH,0C03FH,0C03FH,0000CH,0000CH,0803FH,0803FH,00C0CH,01C0EH,0F807H,0F003H,00000H,00000H,00000H,00000H,00000H ; &80 euro symbol
	DW	00000H,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; &81 block (teletext)
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,08003H,08003H,08001H,08003H,00007H,0000EH,00000H,00000H,00000H ; &82 single low quotation mark
	DW	00000H,07000H,0F000H,0C001H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08003H,0000FH,0000EH,00000H ; &83 small letter f with hook
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,01C0EH,01C0EH,00C06H,01C0EH,0381CH,07038H,00000H,00000H,00000H ; &84 double low quotation mark
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,09819H,09819H,00000H,00000H,00000H,00000H,00000H ; &85 horizontal ellipsis
	DW	00000H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; &86 dagger
	DW	00000H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,0F00FH,0F00FH,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; &87 double dagger
	DW	08001H,0C003H,06006H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &88 circumflex accent
	DW	00000H,03038H,0706CH,0E06CH,0C039H,08003H,00007H,0000EH,0001CH,00038H,00070H,01C67H,0B60DH,0B60DH,01C07H,00000H,00000H,00000H,00000H,00000H ; &89 per mille
	DW	06006H,0E007H,0C003H,0F00FH,0F81FH,01C38H,00C30H,00038H,0F01FH,0F80FH,01C00H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; &8A capital S caron
	DW	00000H,00000H,00000H,08001H,08003H,00007H,0000EH,0000CH,0000EH,00007H,08003H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &8B left angle quotation mark
	DW	00000H,0FC0FH,0FC1FH,08039H,08031H,08031H,08031H,0F831H,0F831H,08031H,08031H,08031H,08039H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; &8C capital OE ligature
	DW	00000H,00000H,08001H,0C003H,0E007H,0F00FH,0B81DH,09C39H,08C31H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H ; &8D up arrow (teletext)
	DW	06006H,0E007H,0C003H,0FC3FH,0FC3FH,03800H,07000H,0E000H,0C001H,08003H,00007H,0000EH,0001CH,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; &8E capital Z caron
	DW	00000H,00000H,08001H,08003H,00007H,0000EH,0001CH,0FC3FH,0FC3FH,0001CH,0000EH,00007H,08003H,08001H,00000H,00000H,00000H,00000H,00000H,00000H ; &8F left arrow (teletext)
	DW	00000H,00000H,08001H,0C001H,0E000H,07000H,03800H,0FC3FH,0FC3FH,03800H,07000H,0E000H,0C001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H ; &90 right arrow (teletext)
	DW	00000H,07000H,0E000H,0C001H,08001H,0C001H,0C001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &91 left single quotation mark
	DW	00000H,08003H,08003H,08001H,08003H,00007H,0000EH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &92 right single quotation mark
	DW	00000H,01C0EH,0381CH,07038H,06030H,07038H,07038H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &93 left double quotation mark
	DW	00000H,01C0EH,01C0EH,00C06H,01C0EH,0381CH,07038H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &94 right double quotation mark
	DW	00000H,00000H,00000H,00000H,00000H,08001H,0C003H,0E007H,0E007H,0C003H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &95 bullet
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,0F81FH,0F81FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &96 en dash
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,0FE7FH,0FE7FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &97 em dash
	DW	06007H,0C00DH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &98 small tilde
	DW	00000H,00000H,0C67EH,0C67EH,0EE18H,0FE18H,0D618H,0D618H,0C618H,0C618H,0C618H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &99 trade mark sign
	DW	00000H,06006H,0E007H,0C003H,00000H,0FC0FH,0FC1FH,00038H,00038H,0F01FH,0F80FH,01C00H,01C00H,0F83FH,0F03FH,00000H,00000H,00000H,00000H,00000H ; &9A small S caron
	DW	00000H,00000H,00000H,08001H,0C001H,0E000H,07000H,03000H,07000H,0E000H,0C001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &9B right angle quotation mark
	DW	00000H,00000H,00000H,00000H,00000H,0780EH,0FC1FH,0CC3BH,08C31H,0FC31H,0FC31H,08031H,0C03BH,0FC1FH,07C0EH,00000H,00000H,00000H,00000H,00000H ; &9C small OE ligature
	DW	00000H,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,0381CH,00000H,00000H,00000H,00000H,00000H ; &9D double line (teletext)
	DW	00000H,06006H,0E007H,0C003H,00000H,0FC3FH,0FC3FH,03800H,07000H,0E001H,08007H,0000EH,0001CH,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; &9E small Z caron
	DW	0300CH,0300CH,0300CH,00000H,00C30H,01C38H,0381CH,0700EH,0E007H,0C003H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; &9F capital Y diaeresis
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; &A0 non-break space
	DW	00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,08001H,00000H ; " "
	DW	00000H,00000H,00000H,08001H,08001H,0FC0FH,0FC1FH,08039H,08031H,08031H,08031H,08031H,08039H,0FC1FH,0FC0FH,08001H,08001H,00000H,00000H,00000H ; " "
	DW	00000H,0F003H,0F807H,01C0EH,00C0CH,0000CH,0000CH,0803FH,0803FH,0000CH,0000CH,0000CH,0000CH,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00C30H,01C38H,0F81FH,0F00FH,0700EH,0700EH,0F00FH,0F81FH,01C38H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00C30H,01C38H,0381CH,0700EH,0FC3FH,0FC3FH,08001H,08001H,0FC3FH,0FC3FH,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,08001H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00030H,00038H,0F01FH,0F81FH,01C38H,01C38H,0F81FH,0F80FH,01C00H,00C00H,00C30H,01C38H,0F81FH,0F00FH,00000H ; " "
	DW	01818H,01818H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,0CC33H,0EC37H,06C36H,00C36H,00C36H,00C36H,06C36H,0EC37H,0CC33H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H ; " "
	DW	00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,01C0EH,0381CH,07038H,07038H,0381CH,01C0EH,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,0FC3FH,0FC3FH,00C00H,00C00H,00C00H,00C00H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,0E007H,0E007H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,0CC37H,0EC37H,06C36H,06C36H,0CC37H,08C37H,0CC37H,0EC36H,06C36H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H ; " "
	DW	00000H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0C003H,0E007H,0700EH,0381CH,0700EH,0E007H,0C003H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,08001H,08001H,08001H,08001H,0FC3FH,0FC3FH,08001H,08001H,08001H,08001H,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0C00FH,0E00FH,07000H,07000H,0E003H,0C007H,0000EH,0000CH,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0C00FH,0E00FH,07000H,07000H,0E00FH,0E00FH,07000H,07000H,0E00FH,0C00FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,06000H,0E000H,0C001H,08003H,00007H,00006H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,06030H,06030H,06030H,06030H,06030H,06030H,06030H,0F830H,0FC3FH,08C3FH,00030H,00030H,00030H,00030H,00000H ; " "
	DW	00000H,08C0FH,08C1FH,08C39H,08C31H,08C31H,08C39H,08C1FH,08C0FH,08C01H,08C01H,08C01H,08C01H,08C01H,08C01H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,08001H,08001H,08003H,00007H,00006H,00000H ; " "
	DW	00000H,08003H,08007H,0800FH,0800DH,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,00000H,00000H,07038H,0381CH,01C0EH,01C0EH,0381CH,07038H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0000CH,0000CH,0000CH,0000CH,0000CH,0000CH,0000CH,0000CH,01C0CH,03C0CH,07C00H,0EC00H,0CC01H,08C01H,0FC01H,0FC01H,00C00H,00C00H,00000H ; " "
	DW	00000H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,00030H,0F831H,0FC31H,00C00H,00C00H,07C00H,0F800H,0C001H,08001H,0FC01H,0FC01H,00000H ; " "
	DW	00000H,0003EH,0003FH,08003H,08003H,0003FH,0003FH,08003H,08003H,01C3FH,03C3EH,07C00H,0EC00H,0CC01H,08C01H,0FC01H,0FC01H,00C00H,00C00H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,08001H,08001H,00000H,00000H,08001H,08001H,08003H,00007H,0000EH,0001CH,00C18H,01C1CH,0F80FH,0F00FH,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0300CH,0300CH,0300CH,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,06006H,06006H,0C003H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0FC0FH,0FC1FH,08039H,08031H,08031H,08031H,0F83FH,0F83FH,08031H,08031H,08031H,08031H,0FC31H,0FC31H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,00C30H,00030H,00030H,00030H,00030H,00030H,00030H,00C30H,01C38H,0F81FH,0F00FH,08001H,08003H,00007H,00006H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0FC3FH,0FC3FH,00030H,00030H,0F03FH,0F03FH,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0FC3FH,0FC3FH,00030H,00030H,0F03FH,0F03FH,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0FC3FH,0FC3FH,00030H,00030H,0F03FH,0F03FH,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0300CH,0300CH,0300CH,00000H,00000H,0FC3FH,0FC3FH,00030H,00030H,0F03FH,0F03FH,00030H,00030H,0FC3FH,0FC3FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0300CH,0300CH,0300CH,00000H,00000H,0F00FH,0F00FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F80FH,01C0CH,00C0CH,00C0CH,00C0CH,08C3FH,08C3FH,00C0CH,00C0CH,00C0CH,01C0CH,0F80FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,00C30H,00C3CH,00C3EH,00C37H,08C33H,0CC31H,0EC30H,07C30H,03C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0300CH,0300CH,0300CH,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,01818H,0381CH,0700EH,0E007H,0C003H,0E007H,0700EH,0381CH,01818H,00000H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0F00FH,0F81FH,01C38H,03C30H,07C30H,0EC30H,0CC31H,08C33H,00C37H,00C3EH,00C3CH,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	0300CH,0300CH,0300CH,00000H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00C30H,01C38H,0381CH,0700EH,0E007H,0C003H,08001H,08001H,08001H,08001H,08001H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00030H,00030H,0F03FH,0F83FH,01C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00030H,00030H,00030H,00030H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0C00FH,0E01FH,07038H,03030H,03030H,03030H,0F031H,0F831H,01C30H,00C30H,00C30H,01C30H,0F831H,0F031H,00030H,00030H,00030H,00030H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,06006H,0C003H,08001H,0F00FH,0F80FH,01C00H,00C00H,0FC0FH,0FC1FH,00C38H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,0781EH,0FC1FH,08C03H,08C01H,0FC1FH,0FC3FH,08031H,08031H,0F83FH,0F81FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,0FC0FH,0FC1FH,00038H,00030H,00030H,00030H,00030H,00038H,0FC1FH,0FC0FH,0C000H,0C001H,08003H,00003H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,0F00FH,0F81FH,01C38H,00C30H,0FC3FH,0FC3FH,00030H,00038H,0F01FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,0800FH,0800FH,08001H,08001H,08001H,08001H,08001H,08001H,0F00FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0601EH,0E01FH,0C003H,0E007H,0700EH,0380CH,01C00H,00C00H,0FC0FH,0FC1FH,01C38H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	01807H,0B80FH,0F01DH,0E018H,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,00000H,0F00FH,0F81FH,01C38H,00C30H,00C30H,00C30H,01C38H,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,08001H,08001H,00000H,00000H,0FC3FH,0FC3FH,00000H,00000H,08001H,08001H,00000H,00000H,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,00000H,00000H,00000H,00000H,0F00FH,0F81FH,07C38H,0EC30H,0CC31H,08C33H,00C37H,01C3EH,0F81FH,0F00FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00006H,00007H,08003H,08001H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	08001H,0C003H,0E007H,06006H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00000H,00000H,00000H,00000H,00000H ; " "
	DW	06000H,0E000H,0C001H,08001H,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,01C00H,0F80FH,0F00FH,00000H ; " "
	DW	00000H,00030H,00030H,00030H,00030H,0F03FH,0F83FH,01C30H,00C30H,00C30H,00C30H,00C30H,01C30H,0F83FH,0F03FH,00030H,00030H,00030H,00030H,00000H ; " "
	DW	00000H,0300CH,0300CH,0300CH,00000H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C30H,00C38H,0FC1FH,0FC0FH,00C00H,01C00H,0F80FH,0F00FH,00000H ; " "
;
; Structure {x%,y%}
;
ptfmt:	dd	8		; Total length (bytes)
ptlnk0:	dd	ptlnk1 - ptlnk0	; Link to next member
	db	'x%',0		; Member name
	dd	0		; Member offset (bytes)
ptlnk1:	dd	0		; Terminating link
	db	'y%',0		; Member name
	dd	4		; Member offset (bytes)
;
; Structure {a&,b&,c&,d&}
;
b4fmt:	dd	4		; Total length (bytes)
b4lnk0:	dd	b4lnk1 - b4lnk0	; Link to next member
	db	'a&',0		; Member name
	dd	0		; Member offset (bytes)
b4lnk1:	dd	b4lnk2 - b4lnk1	; Link to next member
	db	'b&',0		; Member name
	dd	1		; Member offset (bytes)
b4lnk2:	dd	b4lnk3 - b4lnk2	; Link to next member
	db	'c&',0		; Member name
	dd	2		; Member offset (bytes)
b4lnk3:	dd	0		; Terminating link
	db	'd&',0		; Member name
	dd	3		; Member offset (bytes)
;
; FastVar token type values:
;
fvtab:	db	1		; &19 v&  Unsigned byte (8 bits)
	db	4		; &1A v%  Signed dword (32 bits)
	db	8		; &1B v#  Float double (64 bits)
	db	10		; &1C v   Variant numeric (80 bits)
	db	16		; &1D v{} Structure (8+8 bytes)
	db	40		; &1E v%% Signed qword (64 bits)
	db	136		; &1F v$  String (4+4 bytes)
;
	SEGMENT .data		; Necessary for Position Independent Code
;
; Array of function entry points:
;
	times 3	db 0		; Padding
fnarr:	db	1		; Number of dimensions
	dd	(fnarrt-fnarr0)/8 ; Number of entries
	checkalign
fnarr0:	dq	loadn		; Load numeric 
	dq	loads		; Load string
	dq	storen		; Store numeric
	dq	stores		; Store string
	dq	getvar		; Get variable address
	dq	putvar		; Create variable
	dq	expr		; Evaluate expression
	dq	item		; Evaluate item
	dq	lexan		; Lexical analysis (tokenise)
	dq	token		; Print character or keyword
	dq	xfloat		; Convert integer to float
	dq	xfix		; Convert float to integer
	dq	str00		; Convert a number to a string
	dq	con		; Convert a string to a number
	dq	0		; Reserved for sortup
	dq	0		; Reserved for sortdn
	dq	0		; Reserved for hook
	dq	xeq		; Return to BASIC
	dq	putevt		; Store event in queue
	dq	gfxPrimitivesGetFont
	dq	gfxPrimitivesSetFont
	dq	RedefineChar
fnarrt:
;


================================================
FILE: bin/android/build.gradle
================================================
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
    apply plugin: 'com.android.application'
}
else {
    apply plugin: 'com.android.library'
}

android {
    namespace = 'com.rtrussell.bbcbasic'
    compileSdkVersion 35
    defaultConfig {
        if (buildAsApplication) {
            applicationId "com.rtrussell.bbcbasic"
        }
        ndkVersion = "27.3.13750724"
        minSdkVersion 21
        targetSdkVersion 35
        versionCode 149
        versionName "1.44a"
        externalNativeBuild {
            ndkBuild {
                arguments "APP_PLATFORM=android-16"
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
            }
            // cmake {
            //     arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
            //     // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            //     abiFilters 'arm64-v8a'
            // }
        }
    }
    buildTypes {
        release {
            debuggable false
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    applicationVariants.all { variant ->
        tasks["merge${variant.name.capitalize()}Assets"]
            .dependsOn("externalNativeBuild${variant.name.capitalize()}")
    }
    if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) {
        sourceSets.main {
            jniLibs.srcDir 'libs'
        }
        externalNativeBuild {
            ndkBuild {
                path 'jni/Android.mk'
            }
            // cmake {
            //     path 'jni/CMakeLists.txt'
            // }
        }

    }
    lintOptions {
        abortOnError = false
    }

    if (buildAsLibrary) {
        libraryVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith(".aar")) {
                    def fileName = "com.rtrussell.bbcbasic.aar";
                    output.outputFile = new File(outputFile.parent, fileName);
                }
            }
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
}


================================================
FILE: bin/android/help.txt
================================================
•    BBC BASIC is the programming language originally specified and adopted by the British Broadcasting Corporation for its groundbreaking Computer Literacy Project of the early 1980s.

BBC BASIC for SDL 2.0 is an advanced cross-platform implementation which will run on Windows®, MacOS®, Linux® (x86), Raspberry Pi OS™, Android™, iOS® and in a browser.  The full help manual may be found <here>.

The Android, iOS and in-browser editions have a simplified user interface.  To run a program, navigate to the appropriate folder (games, general, graphics, physics, sounds or tools) and tap/click on the program's name.

To exit a program and return to the main menu, tap on the Back [<] button (Android) or press the Escape key.  In iOS there is a soft [<] button; it may not always be displayed but tapping in the top-left corner should still work.

To create a new program, first navigate to the @usr$ folder then long-press or right-click below the list of files and select New file from the context menu.  Alternatively create a new folder under @usr$ and put your program there.

To edit a program, long-press or right-click on the program's name and select Edit from the context menu.  To exit the editor tap on the [<] button or press the Escape key. You cannot edit the supplied example programs.

In the editor a long-press or right-click opens a menu of commands. A long press and drag selects a block of code; a horizontal drag selects part of a line, a vertical drag selects entire lines.  Tap on a selected region for options.

In Android and iOS the contents of the @usr$ folder may be accessed from a desktop computer using a USB connection, or from the Files app in iOS.

It is inevitable that from time to time BBC BASIC will crash (for example abort with an untrapped error), especially if you are testing and debugging your own programs. If this happens it will not damage your device or other apps, but it will be necessary to close BBC BASIC fully and open it again.

BBC BASIC for SDL 2.0 is the Copyright © 2026 of R.T.Russell.  The program and other materials are provided 'as is' and without any guarantee as to their quality or suitability.  Although they are thought to be free from serious bugs, and it is highly unlikely that they could do any harm to other software or systems, there is NO warranty that they will not and their use is at your own risk. 

The supplied example programs and libraries remain the Copyright © 2001-2026 of R.T.Russell and others, but you may incorporate them in whole or in part within your own programs so long as any copyright notice is retained.


================================================
FILE: bin/android/styles.xml
================================================
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.DeviceDefault.NoActionBar">
        <item name="android:windowOptOutEdgeToEdgeEnforcement">true</item>
    </style>

</resources>


================================================
FILE: bin/ios/exported.txt
================================================
_SDL_AddEventWatch
_SDL_AddHintCallback
_SDL_AddTimer
_SDL_AllocFormat
_SDL_AllocPalette
_SDL_AllocRW
_SDL_AtomicAdd
_SDL_AtomicCAS
_SDL_AtomicCASPtr
_SDL_AtomicGet
_SDL_AtomicGetPtr
_SDL_AtomicLock
_SDL_AtomicSet
_SDL_AtomicSetPtr
_SDL_AtomicTryLock
_SDL_AtomicUnlock
_SDL_AudioInit
_SDL_AudioQuit
_SDL_BuildAudioCVT
_SDL_CalculateGammaRamp
_SDL_CaptureMouse
_SDL_ClearError
_SDL_ClearHints
_SDL_ClearQueuedAudio
_SDL_CloseAudio
_SDL_CloseAudioDevice
_SDL_ComposeCustomBlendMode
_SDL_CondBroadcast
_SDL_CondSignal
_SDL_CondWait
_SDL_CondWaitTimeout
_SDL_ConvertAudio
_SDL_ConvertPixels
_SDL_ConvertSurface
_SDL_ConvertSurfaceFormat
_SDL_CreateColorCursor
_SDL_CreateCond
_SDL_CreateCursor
_SDL_CreateMutex
_SDL_CreateRGBSurface
_SDL_CreateRGBSurfaceFrom
_SDL_CreateRGBSurfaceWithFormat
_SDL_CreateRGBSurfaceWithFormatFrom
_SDL_CreateRenderer
_SDL_CreateSemaphore
_SDL_CreateSoftwareRenderer
_SDL_CreateSystemCursor
_SDL_CreateTexture
_SDL_CreateTextureFromSurface
_SDL_CreateThread
_SDL_CreateThreadWithStackSize
_SDL_CreateWindow
_SDL_CreateWindowAndRenderer
_SDL_CreateWindowFrom
_SDL_DelEventWatch
_SDL_DelHintCallback
_SDL_Delay
_SDL_DequeueAudio
_SDL_DestroyCond
_SDL_DestroyMutex
_SDL_DestroyRenderer
_SDL_DestroySemaphore
_SDL_DestroyTexture
_SDL_DestroyWindow
_SDL_DetachThread
_SDL_DisableScreenSaver
_SDL_EnableScreenSaver
_SDL_EnclosePoints
_SDL_EventState
_SDL_FillRect
_SDL_FillRects
_SDL_FilterEvents
_SDL_FlushEvent
_SDL_FlushEvents
_SDL_FreeCursor
_SDL_FreeFormat
_SDL_FreePalette
_SDL_FreeRW
_SDL_FreeSurface
_SDL_FreeWAV
_SDL_GL_BindTexture
_SDL_GL_CreateContext
_SDL_GL_DeleteContext
_SDL_GL_ExtensionSupported
_SDL_GL_GetAttribute
_SDL_GL_GetCurrentContext
_SDL_GL_GetCurrentWindow
_SDL_GL_GetDrawableSize
_SDL_GL_GetProcAddress
_SDL_GL_GetSwapInterval
_SDL_GL_LoadLibrary
_SDL_GL_MakeCurrent
_SDL_GL_ResetAttributes
_SDL_GL_SetAttribute
_SDL_GL_SetSwapInterval
_SDL_GL_SwapWindow
_SDL_GL_UnbindTexture
_SDL_GL_UnloadLibrary
_SDL_GameControllerAddMapping
_SDL_GameControllerAddMappingsFromRW
_SDL_GameControllerClose
_SDL_GameControllerEventState
_SDL_GameControllerFromInstanceID
_SDL_GameControllerGetAttached
_SDL_GameControllerGetAxis
_SDL_GameControllerGetAxisFromString
_SDL_GameControllerGetBindForAxis
_SDL_GameControllerGetBindForButton
_SDL_GameControllerGetButton
_SDL_GameControllerGetButtonFromString
_SDL_GameControllerGetJoystick
_SDL_GameControllerGetStringForAxis
_SDL_GameControllerGetStringForButton
_SDL_GameControllerMapping
_SDL_GameControllerMappingForGUID
_SDL_GameControllerName
_SDL_GameControllerNameForIndex
_SDL_GameControllerOpen
_SDL_GameControllerUpdate
_SDL_GetAssertionHandler
_SDL_GetAssertionReport
_SDL_GetAudioDeviceName
_SDL_GetAudioDeviceStatus
_SDL_GetAudioDriver
_SDL_GetAudioStatus
_SDL_GetBasePath
_SDL_GetCPUCacheLineSize
_SDL_GetCPUCount
_SDL_GetClipRect
_SDL_GetClipboardText
_SDL_GetClosestDisplayMode
_SDL_GetColorKey
_SDL_GetCurrentAudioDriver
_SDL_GetCurrentDisplayMode
_SDL_GetCurrentVideoDriver
_SDL_GetCursor
_SDL_GetDefaultAssertionHandler
_SDL_GetDefaultCursor
_SDL_GetDesktopDisplayMode
_SDL_GetDisplayBounds
_SDL_GetDisplayDPI
_SDL_GetDisplayMode
_SDL_GetDisplayName
_SDL_GetDisplayUsableBounds
_SDL_GetError
_SDL_GetEventFilter
_SDL_GetGlobalMouseState
_SDL_GetGrabbedWindow
_SDL_GetHint
_SDL_GetHintBoolean
_SDL_GetKeyFromName
_SDL_GetKeyFromScancode
_SDL_GetKeyName
_SDL_GetKeyboardFocus
_SDL_GetKeyboardState
_SDL_GetModState
_SDL_GetMouseFocus
_SDL_GetMouseState
_SDL_GetNumAudioDevices
_SDL_GetNumAudioDrivers
_SDL_GetNumDisplayModes
_SDL_GetNumRenderDrivers
_SDL_GetNumTouchDevices
_SDL_GetNumTouchFingers
_SDL_GetNumVideoDisplays
_SDL_GetNumVideoDrivers
_SDL_GetPerformanceCounter
_SDL_GetPerformanceFrequency
_SDL_GetPixelFormatName
_SDL_GetPlatform
_SDL_GetPowerInfo
_SDL_GetPrefPath
_SDL_GetQueuedAudioSize
_SDL_GetRGB
_SDL_GetRGBA
_SDL_GetRelativeMouseMode
_SDL_GetRelativeMouseState
_SDL_GetRenderDrawBlendMode
_SDL_GetRenderDrawColor
_SDL_GetRenderDriverInfo
_SDL_GetRenderTarget
_SDL_GetRenderer
_SDL_GetRendererInfo
_SDL_GetRendererOutputSize
_SDL_GetRevision
_SDL_GetRevisionNumber
_SDL_GetScancodeFromKey
_SDL_GetScancodeFromName
_SDL_GetScancodeName
_SDL_GetSurfaceAlphaMod
_SDL_GetSurfaceBlendMode
_SDL_GetSurfaceColorMod
_SDL_GetSystemRAM
_SDL_GetTextureAlphaMod
_SDL_GetTextureBlendMode
_SDL_GetTextureColorMod
_SDL_GetThreadID
_SDL_GetThreadName
_SDL_GetTicks
_SDL_GetTicks64
_SDL_GetTouchDevice
_SDL_GetTouchFinger
_SDL_GetVersion
_SDL_GetVideoDriver
_SDL_GetWindowBordersSize
_SDL_GetWindowBrightness
_SDL_GetWindowData
_SDL_GetWindowDisplayIndex
_SDL_GetWindowDisplayMode
_SDL_GetWindowFlags
_SDL_GetWindowFromID
_SDL_GetWindowGammaRamp
_SDL_GetWindowGrab
_SDL_GetWindowID
_SDL_GetWindowMaximumSize
_SDL_GetWindowMinimumSize
_SDL_GetWindowOpacity
_SDL_GetWindowPixelFormat
_SDL_GetWindowPosition
_SDL_GetWindowSize
_SDL_GetWindowSurface
_SDL_GetWindowTitle
_SDL_GetWindowWMInfo
_SDL_HapticClose
_SDL_HapticDestroyEffect
_SDL_HapticEffectSupported
_SDL_HapticGetEffectStatus
_SDL_HapticIndex
_SDL_HapticName
_SDL_HapticNewEffect
_SDL_HapticNumAxes
_SDL_HapticNumEffects
_SDL_HapticNumEffectsPlaying
_SDL_HapticOpen
_SDL_HapticOpenFromJoystick
_SDL_HapticOpenFromMouse
_SDL_HapticOpened
_SDL_HapticPause
_SDL_HapticQuery
_SDL_HapticRumbleInit
_SDL_HapticRumblePlay
_SDL_HapticRumbleStop
_SDL_HapticRumbleSupported
_SDL_HapticRunEffect
_SDL_HapticSetAutocenter
_SDL_HapticSetGain
_SDL_HapticStopAll
_SDL_HapticStopEffect
_SDL_HapticUnpause
_SDL_HapticUpdateEffect
_SDL_Has3DNow
_SDL_HasAVX
_SDL_HasAVX2
_SDL_HasAltiVec
_SDL_HasClipboardText
_SDL_HasEvent
_SDL_HasEvents
_SDL_HasIntersection
_SDL_HasMMX
_SDL_HasRDTSC
_SDL_HasSSE
_SDL_HasSSE2
_SDL_HasSSE3
_SDL_HasSSE41
_SDL_HasSSE42
_SDL_HasScreenKeyboardSupport
_SDL_HideWindow
_SDL_Init
_SDL_InitSubSystem
_SDL_IntersectRect
_SDL_IntersectRectAndLine
_SDL_IsGameController
_SDL_IsScreenKeyboardShown
_SDL_IsScreenSaverEnabled
_SDL_IsTextInputActive
_SDL_JoystickClose
_SDL_JoystickCurrentPowerLevel
_SDL_JoystickEventState
_SDL_JoystickFromInstanceID
_SDL_JoystickGetAttached
_SDL_JoystickGetAxis
_SDL_JoystickGetBall
_SDL_JoystickGetButton
_SDL_JoystickGetDeviceGUID
_SDL_JoystickGetGUID
_SDL_JoystickGetGUIDFromString
_SDL_JoystickGetGUIDString
_SDL_JoystickGetHat
_SDL_JoystickInstanceID
_SDL_JoystickIsHaptic
_SDL_JoystickName
_SDL_JoystickNameForIndex
_SDL_JoystickNumAxes
_SDL_JoystickNumBalls
_SDL_JoystickNumButtons
_SDL_JoystickNumHats
_SDL_JoystickOpen
_SDL_JoystickUpdate
_SDL_LoadBMP_RW
_SDL_LoadDollarTemplates
_SDL_LoadFunction
_SDL_LoadObject
_SDL_LoadWAV_RW
_SDL_LockAudio
_SDL_LockAudioDevice
_SDL_LockMutex
_SDL_LockSurface
_SDL_LockTexture
_SDL_Log
_SDL_LogCritical
_SDL_LogDebug
_SDL_LogError
_SDL_LogGetOutputFunction
_SDL_LogGetPriority
_SDL_LogInfo
_SDL_LogMessage
_SDL_LogMessageV
_SDL_LogResetPriorities
_SDL_LogSetAllPriority
_SDL_LogSetOutputFunction
_SDL_LogSetPriority
_SDL_LogVerbose
_SDL_LogWarn
_SDL_LowerBlit
_SDL_LowerBlitScaled
_SDL_MapRGB
_SDL_MapRGBA
_SDL_MasksToPixelFormatEnum
_SDL_MaximizeWindow
_SDL_MinimizeWindow
_SDL_MixAudio
_SDL_MixAudioFormat
_SDL_MouseIsHaptic
_SDL_NumHaptics
_SDL_NumJoysticks
_SDL_NumSensors
_SDL_OpenAudio
_SDL_OpenAudioDevice
_SDL_OpenURL
_SDL_PauseAudio
_SDL_PauseAudioDevice
_SDL_PeepEvents
_SDL_PixelFormatEnumToMasks
_SDL_PollEvent
_SDL_PumpEvents
_SDL_PushEvent
_SDL_QueryTexture
_SDL_QueueAudio
_SDL_Quit
_SDL_QuitSubSystem
_SDL_RWFromConstMem
_SDL_RWFromFP
_SDL_RWFromFile
_SDL_RWFromMem
_SDL_RWclose
_SDL_RWread
_SDL_RWwrite
_SDL_RaiseWindow
_SDL_RecordGesture
_SDL_RegisterEvents
_SDL_RemoveTimer
_SDL_RenderClear
_SDL_RenderCopy
_SDL_RenderCopyEx
_SDL_RenderDrawLine
_SDL_RenderDrawLines
_SDL_RenderDrawPoint
_SDL_RenderDrawPoints
_SDL_RenderDrawRect
_SDL_RenderDrawRects
_SDL_RenderFillRect
_SDL_RenderFillRects
_SDL_RenderFlush
_SDL_RenderCopyF
_SDL_RenderCopyExF
_SDL_RenderDrawLineF
_SDL_RenderDrawLinesF
_SDL_RenderDrawPointF
_SDL_RenderDrawPointsF
_SDL_RenderDrawRectF
_SDL_RenderDrawRectsF
_SDL_RenderFillRectF
_SDL_RenderFillRectsF
_SDL_RenderFlush
_SDL_RenderGeometry
_SDL_RenderGetClipRect
_SDL_RenderGetIntegerScale
_SDL_RenderGetLogicalSize
_SDL_RenderGetScale
_SDL_RenderGetViewport
_SDL_RenderIsClipEnabled
_SDL_RenderPresent
_SDL_RenderReadPixels
_SDL_RenderSetClipRect
_SDL_RenderSetIntegerScale
_SDL_RenderSetLogicalSize
_SDL_RenderSetScale
_SDL_RenderSetViewport
_SDL_RenderTargetSupported
_SDL_ResetAssertionReport
_SDL_RestoreWindow
_SDL_SaveAllDollarTemplates
_SDL_SaveBMP_RW
_SDL_SaveDollarTemplate
_SDL_SemPost
_SDL_SemTryWait
_SDL_SemValue
_SDL_SemWait
_SDL_SemWaitTimeout
_SDL_SensorClose
_SDL_SensorFromInstanceID
_SDL_SensorGetData
_SDL_SensorGetDataWithTimestamp
_SDL_SensorGetDeviceInstanceID
_SDL_SensorGetDeviceName
_SDL_SensorGetDeviceNonPortableType
_SDL_SensorGetDeviceType
_SDL_SensorGetInstanceID
_SDL_SensorGetName
_SDL_SensorGetNonPortableType
_SDL_SensorGetType
_SDL_SensorOpen
_SDL_SensorUpdate
_SDL_SetAssertionHandler
_SDL_SetClipRect
_SDL_SetClipboardText
_SDL_SetColorKey
_SDL_SetCursor
_SDL_SetError
_SDL_SetEventFilter
_SDL_SetHint
_SDL_SetHintWithPriority
_SDL_SetMainReady
_SDL_SetModState
_SDL_SetPaletteColors
_SDL_SetPixelFormatPalette
_SDL_SetRelativeMouseMode
_SDL_SetRenderDrawBlendMode
_SDL_SetRenderDrawColor
_SDL_SetRenderTarget
_SDL_SetSurfaceAlphaMod
_SDL_SetSurfaceBlendMode
_SDL_SetSurfaceColorMod
_SDL_SetSurfacePalette
_SDL_SetSurfaceRLE
_SDL_SetTextInputRect
_SDL_SetTextureAlphaMod
_SDL_SetTextureBlendMode
_SDL_SetTextureColorMod
_SDL_SetThreadPriority
_SDL_SetWindowBordered
_SDL_SetWindowBrightness
_SDL_SetWindowData
_SDL_SetWindowDisplayMode
_SDL_SetWindowFullscreen
_SDL_SetWindowGammaRamp
_SDL_SetWindowGrab
_SDL_SetWindowHitTest
_SDL_SetWindowIcon
_SDL_SetWindowInputFocus
_SDL_SetWindowMaximumSize
_SDL_SetWindowMinimumSize
_SDL_SetWindowModalFor
_SDL_SetWindowOpacity
_SDL_SetWindowPosition
_SDL_SetWindowResizable
_SDL_SetWindowSize
_SDL_SetWindowTitle
_SDL_ShowCursor
_SDL_ShowMessageBox
_SDL_ShowSimpleMessageBox
_SDL_ShowWindow
_SDL_StartTextInput
_SDL_StopTextInput
_SDL_TLSCreate
_SDL_TLSGet
_SDL_TLSSet
_SDL_ThreadID
_SDL_TryLockMutex
_SDL_UnionRect
_SDL_UnloadObject
_SDL_UnlockAudio
_SDL_UnlockAudioDevice
_SDL_UnlockMutex
_SDL_UnlockSurface
_SDL_UnlockTexture
_SDL_UpdateTexture
_SDL_UpdateWindowSurface
_SDL_UpdateWindowSurfaceRects
_SDL_UpdateYUVTexture
_SDL_UpperBlit
_SDL_VideoInit
_SDL_VideoQuit
_SDL_WaitEvent
_SDL_WaitEventTimeout
_SDL_WaitThread
_SDL_WarpMouseGlobal
_SDL_WarpMouseInWindow
_SDL_WasInit
_SDLNet_ResolveHost
_SDLNet_ResolveIP
_SDLNet_TCP_Open
_SDLNet_TCP_Close
_SDLNet_TCP_Accept
_SDLNet_TCP_GetPeerAddress
_SDLNet_TCP_Send
_SDLNet_TCP_Recv
_SDLNet_AllocSocketSet
_SDLNet_FreeSocketSet
_SDLNet_AddSocket
_SDLNet_DelSocket
_SDLNet_CheckSockets
_SDLNet_Linked_Version
_SDLNet_UDP_Open
_SDLNet_UDP_Close
_SDLNet_UDP_Bind
_SDLNet_UDP_Unbind
_SDLNet_UDP_GetPeerAddress
_SDLNet_UDP_Send
_SDLNet_UDP_Recv
_TTF_ByteSwappedUNICODE
_TTF_CloseFont
_TTF_FontAscent
_TTF_FontDescent
_TTF_FontFaceFamilyName
_TTF_FontFaceIsFixedWidth
_TTF_FontFaces
_TTF_FontFaceStyleName
_TTF_FontHeight
_TTF_FontLineSkip
_TTF_GetFontHinting
_TTF_GetFontKerning
_TTF_GetFontKerningSizeGlyphs
_TTF_GetFontOutline
_TTF_GetFontStyle
_TTF_GlyphIsProvided
_TTF_GlyphMetrics
_TTF_Init
_TTF_Linked_Version
_TTF_OpenFont
_TTF_OpenFontIndex
_TTF_OpenFontIndexRW
_TTF_OpenFontRW
_TTF_Quit
_TTF_RenderGlyph_Blended
_TTF_RenderGlyph_Shaded
_TTF_RenderGlyph_Solid
_TTF_RenderText_Blended
_TTF_RenderText_Shaded
_TTF_RenderText_Solid
_TTF_RenderUNICODE_Blended
_TTF_RenderUNICODE_Shaded
_TTF_RenderUNICODE_Solid
_TTF_RenderUTF8_Blended
_TTF_RenderUTF8_Shaded
_TTF_RenderUTF8_Solid
_TTF_SetFontHinting
_TTF_SetFontKerning
_TTF_SetFontOutline
_TTF_SetFontStyle
_TTF_SetFontScriptName
_TTF_SetFontDirection
_TTF_SizeText
_TTF_SizeUNICODE
_TTF_SizeUTF8
_TTF_WasInit
_TTF_GetFreeTypeVersion
_TTF_GetHarfBuzzVersion
_STBIMG_Load
_STBIMG_Load_RW
_STBIMG_LoadFromMemory
_STBIMG_LoadTexture
_STBIMG_LoadTexture_RW
_STBIMG_LoadTextureFromMemory
_STBIMG_CreateSurface
_STBIMG_CreateTexture
_STBIMG_Load_RW_noSeek
_stbi_image_free
_stbi_load_gif_from_memory
_stbi_set_flip_vertically_on_load
_drmp3_init_file
_drmp3_init_memory
_drmp3_uninit
_drmp3_read_pcm_frames_f32
_drmp3_seek_to_pcm_frame
_drmp3_get_pcm_frame_count
_drmp3_open_memory_and_read_f32
_drmp3_open_file_and_read_f32
_drmp3_free
_drmp3dec_f32_to_s16
_GFX_bezierColor
_GFX_filledPolyBezierColor
_GFX_aaFilledEllipseColor
_GFX_aaFilledPolygonColor
_GFX_aaFilledPieColor
_GFX_aaArcColor
_GFX_aaBezierColor
_GFX_aaFilledPolyBezierColor
_GFX_EvaluateBezier
_GFX_RotoZoomSurface
_b2NewWorld
_b2CreateBody
_b2DestroyBody
_b2CircleShape
_b2PolygonShape
_b2ChainShape
_b2CreateChain
_b2CreateLoop
_b2SetNextVertex
_b2SetPrevVertex
_b2SetAsBox
_b2SetAsOrientedBox
_b2SetFilterData
_b2SetSensor
_b2CreateFixtureFromDef
_b2CreateFixtureFromShape
_b2GetBody
_b2GetShape
_b2DestroyFixture
_b2WorldStep
_b2GetTransform
_b2SetPolygon
_b2SetTransform
_b2SetActive
_b2SetAwake
_b2SetSleepingAllowed
_b2SetBullet
_b2SetFixedRotation
_b2IsAwake
_b2GetUserDataB
_b2GetUserDataF
_b2GetUserDataJ
_b2SetUserDataB
_b2SetUserDataF
_b2SetUserDataJ
_b2SetAngularVelocity
_b2SetLinearVelocity
_b2ApplyForce
_b2ApplyLinearImpulse
_b2ApplyTorque
_b2CreateJoint
_b2DestroyJoint
_b2DistanceJointInit
_b2FrictionJointInit
_b2PrismaticJointInit
_b2PulleyJointInit
_b2RevoluteJointInit
_b2WeldJointInit
_b2WheelJointInit
_b2EnableMotorP
_b2EnableMotorR
_b2EnableMotorW
_b2SetMaxMotorForceP
_b2SetMaxMotorTorqueR
_b2SetMaxMotorTorqueW
_b2SetMotorSpeedP
_b2SetMotorSpeedR
_b2SetMotorSpeedW
_b2SetTarget
_b2GetBodyA
_b2GetBodyB
_b2GetContactListW
_b2GetContactListB
_b2GetNextContact
_b2IsTouching
_b2GetFixtureA
_b2GetFixtureB
_b2GetChildIndexA
_b2GetChildIndexB
_b2GetBodyList
_b2GetNextBody
_b2SetGravity
_b2DistanceJointGetAnchorA
_b2DistanceJointGetAnchorB
_b2PulleyJointGetAnchorA
_b2PulleyJointGetAnchorB
_b2RopeJointGetAnchorA
_b2RopeJointGetAnchorB
_b2GetLinearVelocity
_b2GetAngularVelocity
_b2GetMass
_b2DebugInit
_b2DebugMatrix
_b2DrawDebugData
_SDL_malloc
_SDL_memset
_SDL_memcpy
_SDL_memcmp
_SDL_free
_getsockname
_szNotice


================================================
FILE: bin/ios/help.txt
================================================
•    BBC BASIC is the programming language originally specified and adopted by the British Broadcasting Corporation for its groundbreaking Computer Literacy Project of the early 1980s.

BBC BASIC for SDL 2.0 is an advanced cross-platform implementation which will run on Windows®, MacOS®, Linux® (x86), Raspberry Pi OS™, Android™, iOS® and in a browser.  The full help manual may be found <here>.

The Android, iOS and in-browser editions have a simplified user interface.  To run a program, navigate to the appropriate folder (games, general, graphics, physics, sounds or tools) and tap/click on the program's name.

To exit a program and return to the main menu, tap on the Back [<] button (Android) or press the Escape key.  In iOS there is a soft [<] button; it may not always be displayed but tapping in the top-left corner should still work.

To create a new program, first navigate to the @usr$ folder then long-press or right-click below the list of files and select New file from the context menu.  Alternatively create a new folder under @usr$ and put your program there.

To edit a program, long-press or right-click on the program's name and select Edit from the context menu.  To exit the editor tap on the [<] button or press the Escape key. You cannot edit the supplied example programs.

In the editor a long-press or right-click opens a menu of commands. A long press and drag selects a block of code; a horizontal drag selects part of a line, a vertical drag selects entire lines.  Tap on a selected region for options.

In Android and iOS the contents of the @usr$ folder may be accessed from a desktop computer using a USB connection, or from the Files app in iOS.

It is inevitable that from time to time BBC BASIC will crash (for example abort with an untrapped error), especially if you are testing and debugging your own programs. If this happens it will not damage your device or other apps, but it will be necessary to close BBC BASIC fully and open it again.

BBC BASIC for SDL 2.0 is the Copyright © 2026 of R.T.Russell.  The program and other materials are provided 'as is' and without any guarantee as to their quality or suitability.  Although they are thought to be free from serious bugs, and it is highly unlikely that they could do any harm to other software or systems, there is NO warranty that they will not and their use is at your own risk. 

The supplied example programs and libraries remain the Copyright © 2001-2026 of R.T.Russell and others, but you may incorporate them in whole or in part within your own programs so long as any copyright notice is retained.


================================================
FILE: bin/linux/install32.txt
================================================
Installing SDL 2.0 on Linux systems:

32-bit Debian / Mint / Ubuntu:

 sudo apt-get install libsdl2-2.0-0
 sudo apt-get install libsdl2-ttf-2.0-0
 sudo apt-get install libsdl2-net-2.0-0

64-bit Debian / Mint / Ubuntu:

 sudo dpkg --add-architecture i386
 sudo apt-get update
 sudo apt-get dist-upgrade
 sudo apt-get install libglapi-mesa:i386
 sudo apt-get install libegl1-mesa:i386
 sudo apt-get install libgl1-mesa-glx:i386
 sudo apt-get install libudev1:i386
 sudo apt-get install libsdl2-2.0-0:i386
 sudo apt-get install libsdl2-ttf-2.0-0:i386
 sudo apt-get install libsdl2-net-2.0-0:i386

To start BBC BASIC:

 chmod +x bbcsdl
 ./bbcsdl

To create a desktop shortcut:

 chmod +x mkicon.sh
 ./mkicon.sh

If you receive an error message related to dbus_message_new_method_call
start BBC BASIC using:

 env IBUS_ADDRESS=0 ./bbcsdl


================================================
FILE: bin/linux/install64.txt
================================================
Installing SDL 2.0 on Linux systems:

64-bit Debian / Mint / Ubuntu:

 sudo apt-get install libsdl2-2.0-0
 sudo apt-get install libsdl2-ttf-2.0-0
 sudo apt-get install libsdl2-net-2.0-0

64-bit Fedora:

 sudo dnf install SDL2 SDL2_ttf SDL2_net

To start BBC BASIC:

 chmod +x bbcsdl
 ./bbcsdl

To create a desktop shortcut:

 chmod +x mkicon.sh
 ./mkicon.sh


================================================
FILE: bin/linux/makefile
================================================
# On Debian / Ubuntu / Mint download SDL 2.0 and NASM from the repository:
# sudo apt-get install libsdl2-dev
# sudo apt-get install libsdl2-ttf-dev
# sudo apt-get install libsdl2-net-dev
# sudo apt-get install libsdl2-2.0-0
# sudo apt-get install libsdl2-ttf-2.0-0
# sudo apt-get install libsdl2-net-2.0-0
# sudo apt-get install nasm

SDL_LIB = -L/usr/include -lSDL2 -lSDL2main -lSDL2_ttf -lSDL2_net -ldl -lm
LBITS := $(shell getconf LONG_BIT)

VPATH = ../../src ../../include
CXX = gcc -Wall -pthread -I ../../include

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o

all: bbcsdl

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-unused-result -Wno-array-bounds -c -msse2 -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -Wno-unused-result -c -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) -c -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) -c -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-result -c -O2 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) -c -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) -c -Os -fPIC $< -o $@

flood.o: flood.c
	$(CXX) -c -O3 $< -o $@

ifeq ($(LBITS),64)
bbdata.o: ../../src/bbdata_x86_64.nas
	nasm -f elf64 -s ../../src/bbdata_x86_64.nas -o bbdata.o
else
bbdata.o: ../../src/bbdata_x86_32.nas
	nasm -f elf32 -s ../../src/bbdata_x86_32.nas -o bbdata.o
endif

libstb.so: SDL2_rotozoom.o
	$(CXX) -shared -o libstb.so SDL2_rotozoom.o

bbcsdl: $(OBJ) libstb.so
	$(CXX) $(OBJ) -lz -lstb -L . \
	-o bbcsdl $(SDL_LIB) -Wl,-s -Wl,-R,'$$ORIGIN' -rdynamic
	cp bbcsdl ../../
	cp libstb.so ../../


================================================
FILE: bin/linux/mkicon.sh
================================================
#!/bin/bash
MYDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
echo "[Desktop Entry]
Name=BBC BASIC
Comment=BBC BASIC for Linux
Icon=$MYDIR/bbc256x.png
Exec=\"$MYDIR/bbcsdl\"
Type=Application
Encoding=UTF-8
Terminal=false
Categories=None;" > "$HOME/Desktop/bbcsdl.desktop"
chmod +x "$HOME/Desktop/bbcsdl.desktop"



================================================
FILE: bin/macos/makefile
================================================
# Download pre-compiled frameworks to /Library/Frameworks/
# SDL2     from https://www.libsdl.org/download-2.0.php
# SDL2_ttf from https://www.libsdl.org/projects/SDL_ttf/
# SDL2_net from https://www.libsdl.org/projects/SDL_net/

ARCH := $(shell uname -m)
SDL_LIB = -L/usr/include -ldl -lm
MIN_MACOS_VERSION = 10.7

VPATH = ../../src ../../include
CXX = gcc -Wall -pthread -mmacosx-version-min=$(MIN_MACOS_VERSION) -F /Library/Frameworks -I ../../include

ifeq ($(ARCH),arm64)
    OBJ_EXTRA = sort.o
endif

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o bbctmp.o $(OBJ_EXTRA)

all: bbcsdl

clean:
	rm -f *.o bbcsdl libstb.dylib

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-unused-result -Wno-array-bounds -c -msse2 -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -Wno-unused-result -c -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) -c -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) -c -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-result -c -O2 $< -o $@

bbctmp.o: bbctmp.m
	$(CXX) -c -Os $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) -c -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) -c -Os -fPIC $< -o $@

flood.o: flood.c
	$(CXX) -c -O3 $< -o $@

sort.o: sort.c
	$(CXX) -c -O3 $< -o $@

ifeq ($(ARCH),arm64)
bbasmb.o: bbasmb_arm_64.c BBC.h
	$(CXX) -c -Os $< -o $@

    BBDATA_COMPILE = clang -mmacosx-version-min=$(MIN_MACOS_VERSION) -c
    BBDATA_SRC = ../../src/bbdata_arm_64.s
else 
bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

    BBDATA_COMPILE = nasm --prefix _ -f macho64 -s
    BBDATA_SRC = ../../src/bbdata_x86_64.nas
endif

bbdata.o: $(BBDATA_SRC)
	$(BBDATA_COMPILE) $(BBDATA_SRC) -o bbdata.o

libstb.dylib: SDL2_rotozoom.o SDL2_gfxPrimitives.o
	$(CXX) -dynamiclib -F/Library/Frameworks -framework SDL2 \
	-o libstb.dylib SDL2_rotozoom.o SDL2_gfxPrimitives.o

bbcsdl: $(OBJ) libstb.dylib
	$(CXX) $(OBJ) -lz -lstb -F/Library/Frameworks -L . \
	-framework SDL2 -framework SDL2_ttf -framework SDL2_net \
	-framework Foundation -Wl,-headerpad_max_install_names \
	-o bbcsdl $(SDL_LIB)
	install_name_tool -add_rpath /Library/Frameworks bbcsdl
	install_name_tool -change libstb.dylib "@executable_path/libstb.dylib" bbcsdl
	cp bbcsdl ../../
	cp libstb.dylib ../../


================================================
FILE: bin/raspi/install-rpi.txt
================================================
Update your Raspberry Pi (recommended):

 sudo apt-get update
 sudo apt-get dist-upgrade

Install SDL 2.0:

 sudo apt-get install libsdl2-2.0-0
 sudo apt-get install libsdl2-ttf-2.0-0
 sudo apt-get install libsdl2-net-2.0-0
 sudo apt-get install mesa-utils
 chmod +x bbcsdl
 chmod +x mkicon.sh

Enable the 'experimental' GL Driver (Raspberry Pi 3 only):

 sudo raspi-config
 Advanced Options... GL Driver... GL (Full KMS)... Ok... Finish

To start BBC BASIC:

 ./bbcsdl

To create a desktop shortcut:

 ./mkicon.sh

RTR 09-May-2021


================================================
FILE: bin/raspi/makefile
================================================
# Get SDL 2.0 from the Raspbian repository:
# sudo apt-get install libsdl2-dev
# sudo apt-get install libsdl2-ttf-dev
# sudo apt-get install libsdl2-net-dev
# sudo apt-get install libsdl2-2.0-0
# sudo apt-get install libsdl2-ttf-2.0-0
# sudo apt-get install libsdl2-net-2.0-0

SDL_LIB = -L/usr/lib/ -lSDL2 -lSDL2main -lSDL2_ttf -lSDL2_net -ldl -lm

VPATH = ../../src ../../include
CXX = gcc -Wall -pthread -I ../../include
CXXFLAGS = -march=armv7-a -mthumb -munaligned-access -mfloat-abi=hard -c

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o

all: bbcsdl

bbmain.o: bbmain.c BBC.h
	$(CXX) -Wno-attributes $(CXXFLAGS) -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) $(CXXFLAGS) -DARMHF -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds $(CXXFLAGS) -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_arm_32.c BBC.h
	$(CXX) $(CXXFLAGS) -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-unused-result -Wno-array-bounds $(CXXFLAGS) -mfpu=neon -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -Wno-unused-result $(CXXFLAGS) -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) $(CXXFLAGS) -DARMHF -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) $(CXXFLAGS) -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-result $(CXXFLAGS) -O2 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) $(CXXFLAGS) -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) $(CXXFLAGS) -Os -fPIC $< -o $@

flood.o: flood.c
	$(CXX) $(CXXFLAGS) -O3 $< -o $@

bbdata.o: ../../src/bbdata_arm_32.s
	as ../../src/bbdata_arm_32.s -o bbdata.o

libstb.so: SDL2_rotozoom.o
	$(CXX) -shared -o libstb.so SDL2_rotozoom.o

bbcsdl: $(OBJ) libstb.so
	$(CXX) $(OBJ) -lz -lstb -L . \
	$(SDL_LIB) -o bbcsdl -Wl,-s -Wl,-R,'$$ORIGIN' -rdynamic
	cp bbcsdl ../../
	cp libstb.so ../../


================================================
FILE: bin/raspi/mkicon.sh
================================================
#!/bin/bash
MYDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" > /dev/null && pwd )"
echo "[Desktop Entry]
Name=BBC BASIC
Comment=BBC BASIC for Raspberry Pi
Icon=$MYDIR/bbc256x.png
Exec=\"$MYDIR/bbcsdl\"
Type=Application
Encoding=UTF-8
Terminal=false
Categories=None;" > "$HOME/Desktop/bbcsdl.desktop"
chmod +x "$HOME/Desktop/bbcsdl.desktop"


================================================
FILE: bin/rpi64/install-rpi.txt
================================================
Update your Raspberry Pi (recommended):

 sudo apt-get update
 sudo apt-get dist-upgrade

Install SDL 2.0:

 sudo apt-get install libsdl2-2.0-0
 sudo apt-get install libsdl2-ttf-2.0-0
 sudo apt-get install libsdl2-net-2.0-0
 sudo apt-get install mesa-utils
 chmod +x bbcsdl
 chmod +x mkicon.sh

Enable the 'experimental' GL Driver (Raspberry Pi 3 only):

 sudo raspi-config
 Advanced Options... GL Driver... GL (Full KMS)... Ok... Finish

To start BBC BASIC:

 ./bbcsdl

To create a desktop shortcut:

 ./mkicon.sh

RTR 09-May-2021


================================================
FILE: bin/rpi64/makefile
================================================
# Get SDL 2.0 from the Raspbian repository:
# sudo apt-get install libsdl2-dev
# sudo apt-get install libsdl2-ttf-dev
# sudo apt-get install libsdl2-net-dev
# sudo apt-get install libsdl2-2.0-0
# sudo apt-get install libsdl2-ttf-2.0-0
# sudo apt-get install libsdl2-net-2.0-0

SDL_LIB = -L/usr/lib/ -lSDL2 -lSDL2main -lSDL2_ttf -lSDL2_net -ldl -lm

VPATH = ../../src ../../include
CXX = gcc -Wall -pthread -I ../../include
CXXFLAGS = -c

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o sort.o

all: bbcsdl

bbmain.o: bbmain.c BBC.h
	$(CXX) -Wno-attributes $(CXXFLAGS) -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) $(CXXFLAGS) -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds $(CXXFLAGS) -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_arm_64.c BBC.h
	$(CXX) $(CXXFLAGS) -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-unused-result -Wno-array-bounds $(CXXFLAGS) -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -Wno-unused-result $(CXXFLAGS) -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) $(CXXFLAGS) -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) $(CXXFLAGS) -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-result $(CXXFLAGS) -O2 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) $(CXXFLAGS) -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) $(CXXFLAGS) -Os -fPIC $< -o $@

flood.o: flood.c
	$(CXX) $(CXXFLAGS) -O3 $< -o $@

sort.o: sort.c
	$(CXX) $(CXXFLAGS) -O3 $< -o $@

bbdata.o: ../../src/bbdata_arm_64.s
	sed 's/_\([a-z]*\)/\1/g' <../../../BBCSDL/src/bbdata_arm_64.s >bbdata.s
	as bbdata.s -o bbdata.o

libstb.so: SDL2_rotozoom.o
	$(CXX) -shared -o libstb.so SDL2_rotozoom.o

bbcsdl: $(OBJ) libstb.so
	$(CXX) $(OBJ) -lz -lstb -L . \
	$(SDL_LIB) -o bbcsdl -Wl,-s -Wl,-R,'$$ORIGIN' -rdynamic
	cp bbcsdl ../../
	cp libstb.so ../../


================================================
FILE: bin/wasm/BBC.h
================================================
/******************************************************************\
*       BBC BASIC for SDL 2.0 (Emscripten / Web Assembly)          *
*       Copyright (c) R. T. Russell, 2000-2022                     *
*                                                                  *
*       BBC.h constant and variable declarations                   *
*       Version 1.28a, 23-Jan-2022                                 *
\******************************************************************/

// Constants:
#define STACK_NEEDED 512
#define ACCSLEN 65536 // Must be the same in bbcsdl.h

// Sentinels:
#define CALCHK	0xC3414C43
#define DIMCHK	0xC4494D43
#define FNCHK	0xC64E4348
#define FORCHK	0xC64F5243
#define GOSCHK	0xC74F5343
#define LDCHK	0xCC444348
#define LOCCHK	0xCC4F4343
#define ONCHK	0xCF4E4348
#define PROCHK	0xD0524F43
#define REPCHK	0xD2455043
#define RETCHK	0xD2455443
#define WHICHK	0xD7484943

// Tokens:
#define TAND	-128
#define TDIV	-127
#define TEOR	-126
#define TMOD	-125
#define TOR	-124
#define TERROR	-123
#define TLINE	-122
#define TOFF	-121
#define TSTEP	-120
#define TSPC	-119
#define TTAB	-118
#define TELSE	-117
#define TTHEN	-116
#define TLINO	-115
#define TOPENIN	-114
#define TPTRR	-113

#define TPAGER	-112
#define TTIMER	-111
#define TLOMEMR	-110
#define THIMEMR	-109
#define TABS	-108
#define TACS	-107
#define TADVAL	-106
#define TASC	-105
#define TASN	-104
#define TATN	-103
#define TBGET	-102
#define TCOS	-101
#define TCOUNT	-100
#define TDEG	-99
#define TERL	-98
#define TERR	-97

#define TEVAL	-96
#define TEXP	-95
#define TEXTR	-94
#define TFALSE	-93
#define TFN	-92
#define TGET	-91
#define TINKEY	-90
#define TINSTR	-89
#define TINT	-88
#define TLEN	-87
#define TLN	-86
#define TLOG	-85
#define TNOT	-84
#define TOPENUP	-83
#define TOPENOUT -82
#define TPI	-81

#define TPOINT	-80
#define TPOS	-79
#define TRAD	-78
#define TRND	-77
#define TSGN	-76
#define TSIN	-75
#define TSQR	-74
#define TTAN	-73
#define TTO	-72
#define TTRUE	-71
#define TUSR	-70
#define TVAL	-69
#define TVPOS	-68
#define TCHR	-67
#define TGETS	-66
#define TINKEYS	-65

#define TLEFT	-64
#define TMID	-63
#define TRIGHT	-62
#define TSTR	-61
#define TSTRING	-60
#define TEOF	-59
#define TSUM	-58
#define TWHILE	-57
#define TCASE	-56
#define TWHEN	-55
#define TOF	-54
#define TENDCASE -53
#define TOTHERWISE -52
#define TENDIF	-51
#define TENDWHILE -50
#define TPTRL	-49

#define TPAGEL	-48
#define TTIMEL	-47
#define TLOMEML	-46
#define THIMEML	-45
#define TSOUND	-44
#define TBPUT	-43
#define TCALL	-42
#define TCHAIN	-41
#define TCLEAR	-40
#define TCLOSE	-39
#define TCLG	-38
#define TCLS	-37
#define TDATA	-36
#define TDEF	-35
#define TDIM	-34
#define TDRAW	-33

#define TEND	-32
#define TENDPROC -31
#define TENVEL	-30
#define TFOR	-29
#define TGOSUB	-28
#define TGOTO	-27
#define TGCOL	-26
#define TIF	-25
#define TINPUT	-24
#define TLET	-23
#define TLOCAL	-22
#define TMODE	-21
#define TMOVE	-20
#define TNEXT	-19
#define TON	-18
#define TVDU	-17

#define TPLOT	-16
#define TPRINT	-15
#define TPROC	-14
#define TREAD	-13
#define TREM	-12
#define TREPEAT	-11
#define TREPORT	-10
#define TRESTOR	-9
#define TRETURN	-8
#define TRUN	-7
#define TSTOP	-6
#define TCOLOUR	-5
#define TTRACE	-4
#define TUNTIL	-3
#define TWIDTH	-2
#define TOSCLI	-1

#define TCIRCLE	1
#define TELLIPSE 2
#define TFILL	3
#define TMOUSE	4
#define TORIGIN	5
#define TQUIT	6
#define TRECT	7
#define TSWAP	8
#define TSYS	9
#define TTINT	10
#define TWAIT	11
#define TINSTALL 12
#define TPRIVATE 14
#define TBY	15
#define TEXIT	16

#define FUNTOK	TLINO // first function token
#define TOKLO	TPTRR
#define TOKHI	THIMEMR
#define OFFSIT	TPTRL-TPTRR

// Non-token statements:
// * star command
// = return from function
// ( label
// : separator
// [ assembler

// Bit names:
#define BIT0	0x01
#define BIT1	0x02
#define BIT2	0x04
#define BIT3	0x08
#define BIT4	0x10
#define BIT5	0x20
#define BIT6	0x40
#define BIT7	0x80

// Flag bits:
#define ESCFLG	BIT7	// ESCape key pressed 
#define ESCDIS	BIT6	// ESCape key disabled (*ESC OFF)
#define ALERT	BIT5	// Pending event interrupt
#define FLASH	BIT4	// MODE 7 flash update needed
#define PHASE	BIT3    // MODE 7 flash phase
#define PAUSE	BIT2	// In debug paused state
#define SSTEP	BIT1	// Single-step requested
#define KILL	BIT0	// Program wants to terminate

// Special 32-bit 'pointer' type for BASIC's heap:
#define STRIDE sizeof(void *) / sizeof(heapptr)
typedef unsigned int heapptr ;

// Structures and unions:
typedef struct tagPARM
{
	size_t i[16] ;
	double f[8] ;
} PARM, *LPPARM ;

// A variant holds an 80-bit long double, a 64-bit long long or a string descriptor.
// n.b. GCC pads a long double to 16 bytes (128 bits) for alignment reasons but only
// the least-significant 80-bits need to be stored on the heap, in files etc.
// When a long double is 64-bits rather than 80-bits (e.g. ARM) it will be necessary
// to force the type word (.i.t or .s.t member) to a value other than 0 or -1. 
typedef union __attribute__ ((packed)) __attribute__ ((aligned (4))) tagVAR
{
#if defined(__arm__) || defined(__aarch64__) || defined(__EMSCRIPTEN__)
	double f ;
#else
        long double f ;
#endif
        struct
        {
          long long n ;
          short t ; // = 0
        } i ;
        struct
        {
          heapptr p ; // Assumed to be 32 bits
          unsigned int l ; // Must be unsigned for overflow tests in 'math'
          short t ; // = -1
        } s ;
	struct
	{
	  double d ;
	  short t ; // unused (loadn/storen only)
	} d ;
} VAR, *LPVAR ; 

// String descriptor:
typedef struct __attribute__ ((packed)) __attribute__ ((aligned (4))) tagSTR
{
	heapptr p ; // Assumed to be 32 bits
	int l ;
} STR, *LPSTR ;

typedef struct tagRND
{
	unsigned int l ;
	unsigned char h ;
} RND, *LPRND ;

// Structure for linked list of string free space
struct node
{
	struct node *next ;
	char *data ;
} ;
typedef struct node node ;

// Base address for 32-bit offsets into heap:
#if defined(__x86_64__) || defined(__aarch64__)
#define zero userRAM
#define TMASK 31
#define STYPE 16
#define ATYPE 40
#else
#define zero (void*) 0
#define TMASK 15
#define STYPE 24
#define ATYPE 4
#endif

// Register globals:
#ifdef __llvm__
extern signed char *esi ;		// Program pointer
extern heapptr *esp ;			// Stack pointer
#else
#ifdef __i386__
register signed char *esi asm ("esi") ;	// Program pointer
register heapptr *esp asm ("edi") ;	// Stack pointer
#endif
#ifdef __arm__
register signed char *esi asm ("r10") ;	// Program pointer
register heapptr *esp asm ("r11") ;	// Stack pointer
#endif
#ifdef __x86_64__
register signed char *esi asm ("r12") ;	// Program pointer
register heapptr *esp asm ("r13") ;	// Stack pointer
#endif
#ifdef __aarch64__
register signed char *esi asm ("r10") ;	// Program pointer
register heapptr *esp asm ("r11") ;	// Stack pointer
#endif
#endif

// Data locations (defined in bbcdata):
extern int stavar[] ;		// Static integer variables
#define dynvar ((heapptr *)((char*)stavar + 108))	// Linked-list pointers
#define fnptr  ((heapptr *)((char*)stavar + 324))	// Pointer to user FuNctions
#define proptr ((heapptr *)((char*)stavar + 328))	// Pointer to user PROCedures
#define accs   (*(char **)((char*)stavar + 332))	// String accumulator
#define buff   (*(char **)((char*)stavar + 336))	// Temporary line buffer
#define vpage  (*(heapptr *)((char*)stavar + 340))	// Value of PAGE
#define tracen (*(unsigned short *)((char*)stavar + 344))	// TRACE maximum line number
#define lomem  (*(heapptr *)((char*)stavar + 348))	// Pointer to base of heap
#define pfree  (*(heapptr *)((char*)stavar + 352))	// Pointer to free space
#define himem  (*(heapptr *)((char*)stavar + 356))	// Pointer to top of stack
#define libase (*(heapptr *)((char*)stavar + 360))	// Base of libraries 
#define errtxt (*(const char **)((char*)stavar + 364))	// Most recent error message
#define onersp (*(heapptr **)((char*)stavar + 368))	// ON ERROR LOCAL stack pointer
#define errtrp (*(heapptr *)((char*)stavar + 372))	// Pointer to ON ERROR handler
#define datptr (*(heapptr *)((char*)stavar + 376))	// DATA pointer
#define vcount (*(unsigned int *)((char*)stavar + 380))	// Character count since newline
#define curlin (*(heapptr *)((char*)stavar + 384))	// Pointer to current line
#define timtrp (*(heapptr *)((char*)stavar + 388))	// Pointer to ON TIME handler
#define clotrp (*(heapptr *)((char*)stavar + 392))	// Pointer to ON CLOSE handler
#define siztrp (*(heapptr *)((char*)stavar + 396))	// Pointer to ON MOVE handler
#define systrp (*(heapptr *)((char*)stavar + 400))	// Pointer to ON SYS handler
#define moutrp (*(heapptr *)((char*)stavar + 404))	// Pointer to ON MOUSE handler
#define errlin (*(heapptr *)((char*)stavar + 408))	// Pointer to error line
#define prand  (*(LPRND)((char*)stavar + 412))		// Pseudo-random number
#define vwidth (*(unsigned char *)((char*)stavar + 417))// Width for auto-newline
#define errnum (*(unsigned char *)((char*)stavar + 418))// Error code number
#define liston (*(unsigned char *)((char*)stavar + 419))// *FLOAT/*HEX/*LOWERCASE/OPT
#define lstopt (*(char *)((char*)stavar + 444))		// LISTO value

extern node *flist[] ;		// String free-lists
extern STR tmps ;		// Temporary string descriptor
extern unsigned char fvtab[] ;	// Table of 'fast' variable types

extern int vduvar[] ;		// VDU variables
#define modeno (*(char *)((char*)vduvar + 72))		// MODE number
#define evtqw (*(unsigned char *)((char*)vduvar + 205))	// Event queue write pointer
#define evtqr (*(unsigned char *)((char*)vduvar + 206))	// Event queue read pointer

extern int sysvar[] ;		// @ variables linked list
#define memhdc (*(size_t *)((char*)sysvar + 12))	// SDL Renderer
#define flags  (*(unsigned char *)((char*)sysvar + 183))// BASIC's Boolean flags byte
#define link00 (*(int *)((char*)sysvar + 490))		// Terminating link in @ list
#define diradr (*(heapptr *)((char*)sysvar + 228))
#define dirlen (*(int *)((char*)sysvar + 232))
#define libadr (*(heapptr *)((char*)sysvar + 248))
#define liblen (*(int *)((char*)sysvar + 252))
#define cmdadr (*(heapptr *)((char*)sysvar + 268))
#define cmdlen (*(int *)((char*)sysvar + 272))
#define usradr (*(heapptr *)((char*)sysvar + 288))
#define usrlen (*(int *)((char*)sysvar + 292))
#define tmpadr (*(heapptr *)((char*)sysvar + 308))
#define tmplen (*(int *)((char*)sysvar + 312))

// Defined in bbcsdl.c:
extern char *szCmdLine ;	// @cmd$
extern char *szLoadDir ;	// @dir$
extern char *szLibrary ;	// @lib$
extern char *szUserDir ;	// @usr$
extern char *szTempDir ;	// @tmp$
extern const char szNotice [] ;
extern void *progRAM ;
extern void *userRAM ;

// Alignment helper types:
typedef __attribute__((aligned(1))) int unaligned_int;
typedef __attribute__((aligned(1))) intptr_t unaligned_intptr_t;
typedef __attribute__((aligned(1))) unsigned int unaligned_uint;
typedef __attribute__((aligned(1))) unsigned short unaligned_ushort;
typedef __attribute__((aligned(1))) void* unaligned_void_ptr;
typedef __attribute__((aligned(1))) char* unaligned_char_ptr;
typedef __attribute__((aligned(1))) VAR unaligned_VAR;

// Helper macros to fix alignment problem:
#define ILOAD(p)    *((unaligned_int*)(p))
#define ISTORE(p,i) *((unaligned_int*)(p)) = i
#define TLOAD(p)    *((unaligned_intptr_t*)(p))
#define TSTORE(p,i) *((unaligned_intptr_t*)(p)) = i 
#define ULOAD(p)    *((unaligned_uint*)(p))
#define USTORE(p,i) *((unaligned_uint*)(p)) = i 
#define SLOAD(p)    *((unaligned_ushort*)(p))
#define SSTORE(p,i) *((unaligned_ushort*)(p)) = i 
#define VLOAD(p)    *((unaligned_void_ptr*)(p))
#define VSTORE(p,i) *((unaligned_void_ptr*)(p)) = i 
#define CLOAD(p)    *((unaligned_char_ptr*)(p))
#define CSTORE(p,i) *((unaligned_char_ptr*)(p)) = i 
#define NLOAD(p)    *((unaligned_VAR*)(p))
#define NSTORE(p,i) *((unaligned_VAR*)(p)) = i


================================================
FILE: bin/wasm/bbcsdl.h
================================================
/******************************************************************\
*       BBC BASIC for SDL 2.0 (Emscripten / Web Assembly)          *
*       Copyright (c) R. T. Russell, 2000-2023                     *
*                                                                  *
*       BBCSDL.H constant definitions                              *
*       Version 1.37a 28-Aug-2023                                  *
\******************************************************************/

// System constants :

#define	ACCSLEN 65536		// Must be the same in BBC.h
#define PAGE_OFFSET ACCSLEN + 0x21C00     // Offset of PAGE from memory base
#define XSCREEN        2048     // Width of screen output texture
#define YSCREEN        2048     // Height of screen output texture
#define MAX_PORTS	4	// Maximum number of port channels
#define MAX_FILES	8	// Maximum number of file channels
#define MAX_LINE_LEN   2304     // At least 252*RECTANGLE + 4
#define MARGINL        1000     // Default left margin (mm * 100)
#define MARGINR        1000     // Default right margin (mm * 100)
#define MARGINT        1000     // Default top margin (mm * 100)
#define MARGINB        1000     // Default bottom margin (mm * 100)
#define	SCREEN_WIDTH	640	// Initial width
#define	SCREEN_HEIGHT	500	// Initial height
#define	AUDIOLEN	441 * 4	// Length of audio block in bytes
#define	SOUNDQE         4       // Number of bytes per sound entry
#define SOUNDQL         5*SOUNDQE // Number of bytes per channel
#define MAX_EVENTS	512	// Maximum SDL events to queue
#define MAX_TEMPO	10	// Maximum (slowest) *TEMPO setting

// User-defined message IDs:

#define	WM_APP		0x8000
#define WMU_REALLOC     WM_APP+4  // must be the same in BBCEQUS.INC
#define WMU_WAVEOPEN    WM_APP+5  // must be the same in BBCEQUS.INC
#define WMU_WAVECLOSE   WM_APP+6  // must be the same in BBCEQUS.INC
#define WMU_TIMER       WM_APP+26

// Custom user-event IDs:

#define EVT_VDU		0x2000	// Send a VDU command
#define EVT_COPYKEY	0x2001	// Handle 'copy key' actions
#define EVT_TINT	0x2002	// Get RGB pixel value
#define EVT_DISPLAY	0x2003	// *DISPLAY command
#define EVT_PIXELS	0x2004	// Read back pixels
#define EVT_CARET	0x2005	// Get text caret coordinates
#define EVT_FONT	0x2006	// Open a font
#define EVT_CHAR	0x2007	// Get character at text x,y
#define EVT_WIDTH	0x2008	// Get width of a string
#define EVT_REFLAG	0x2009	// Update refresh flag
#define EVT_SYSCALL	0x200A	// Call in GUI thread context
#define EVT_QUIT	0x200B	// Terminate with exit code
#define EVT_MOUSE	0x200C	// Get mouse position/buttons
#define EVT_MOUSETO	0x200D	// Move mouse pointer
#define EVT_OSK		0x200E	// En/disable On Screen Keyboard
#define EVT_OSWORD	0x200F  // OSWORD call
#define EVT_TIMER	0x2010	// Set new timer period
#define EVT_FSSYNC	0x2011  // Sync filesystem (Emscripten)
#define EVT_RUNJS	0x2012  // Run Javascript (Emscripten)

// Bit names:

#define	BIT0		0x01
#define	BIT1		0x02
#define	BIT2		0x04
#define	BIT3		0x08
#define	BIT4		0x10
#define	BIT5		0x20
#define	BIT6		0x40
#define	BIT7		0x80

// Bits in [vflags]:

#define	IOFLAG		BIT0	// Insert/overtype
#define	EGAFLG		BIT1	// EGA-compatible modes (*EGA [ON])
#define	CGAFLG		BIT2	// CGA-compatible modes (*EGA OFF)
#define	PTFLAG		BIT3	// VDU 2 active
#define	HRGFLG		BIT4	// VDU 5 active
#define	VDUDIS		BIT5	// VDU 21 active
#define	UFONT		BIT6	// User font selected
#define	UTF8		BIT7	// UTF-8 mode selected

// Bits in flags byte:

#define ESCFLG          0x80
#define ESCDIS          0x40
#define ALERT           0x20
#define FLASH           0x10
#define PHASE           0x08    
#define PAUSE           0x04
#define SSTEP           0x02
#define KILL            0x01

// BASIC tokens:

#define TOK_ELSE       -117
#define TOK_THEN       -116
#define TOK_LINENO     -115
#define TOK_FN          -92
#define TOK_WHILE       -57
#define TOK_CASE        -56
#define TOK_WHEN        -55
#define TOK_ENDCASE     -53
#define TOK_OTHERWISE   -52
#define TOK_ENDIF       -51
#define TOK_ENDWHILE    -50
#define TOK_CALL        -42
#define TOK_DATA        -36
#define TOK_DEF         -35
#define TOK_FOR         -29
#define TOK_GOSUB       -28
#define TOK_GOTO        -27
#define TOK_IF          -25
#define TOK_LOCAL       -22
#define TOK_NEXT        -19
#define TOK_ON          -18
#define TOK_PROC        -14
#define TOK_READ        -13
#define TOK_REM         -12
#define TOK_REPEAT      -11
#define TOK_RUN          -7
#define TOK_UNTIL        -3
#define TOK_EXIT         16

#define TOKLO          -113   // first token with left and right forms
#define TOKHI          -109   // last token with left and right forms
#define OFFSIT           64   // offset from 'right' to 'left' form

// Special 32-bit 'pointer' type for BASIC's heap:
typedef unsigned int heapptr ;

// Structures and unions:
typedef struct tagPARM
{
	size_t i[16] ;
	double f[8] ;
} PARM, *LPPARM ;

typedef struct tagFCB
{
	unsigned char p ; // pointer
	unsigned char o ; // offset  (0-256)
	unsigned char w ; // written (0-256)
	signed char f ;   // bit0: offset<>0, bit7: written<>0
} FCB, *LPFCB ;

typedef struct tagRND
{
	unsigned int l ;
	unsigned char h ;
} RND, *LPRND ;

// Static variables:

extern int stavar[] ;		// Static integer variables
#define accs (*(char **)((char*)stavar +  332))		// String accumulator
#define buff (*(char **)((char*)stavar + 336))		// Temporary line buffer
#define vcount (*(unsigned int *)((char*)stavar + 380))	// Character count since newline
#define curlin (*(heapptr *)((char*)stavar + 384))
#define timtrp (*(heapptr *)((char*)stavar + 388))
#define clotrp (*(heapptr *)((char*)stavar + 392))
#define siztrp (*(heapptr *)((char*)stavar + 396))
#define systrp (*(heapptr *)((char*)stavar + 400))
#define moutrp (*(heapptr *)((char*)stavar + 404))
#define prand  (*(LPRND)((char*)stavar + 412))		// Pseudo-random number
#define liston (*(unsigned char *)((char*)stavar + 419))// *FLOAT/*HEX/*LOWERCASE/OPT
#define path   (*(char**)((char*)stavar + 420))		// File path buffer
#define keystr (*(char ***)((char*)stavar + 424))	// Pointers to user *KEY strings
#define keybdq (*(char **)((char*)stavar + 428))	// Keyboard queue (indirect) 
#define eventq (*(int **)((char*)stavar + 432))		// Event queue (indirect)
#define keyptr (*(unsigned char **)((char*)stavar + 436))// Pointer to *KEY string
#define usrchr (*(char **)((char*)stavar + 440))	// Pointer to user-defined chars
#define lstopt (*(char *)((char*)stavar + 444))
#define sclflg (*(char *)((char*)stavar + 445))
#define optval (*(unsigned char *)((char*)stavar + 446))// I/O redirection
#define farray (*(unsigned char *)((char*)stavar + 447))// @hfile%() number of dimensions
#define fasize (*(unsigned int *)((char*)stavar + 448))	// @hfile%() number of elements
#define filbuf ((void**)((char*)stavar + 452))		// @hfile%(0)
#define fcbtab ((FCB *)((char*) stavar + 504))		// fcbtab[]
#define spchan (*(SDL_RWops **)((char*)stavar + 536))	// SPOOL channel
#define exchan (*(SDL_RWops **)((char*)stavar + 540))	// EXEC channel
#define sacc   ((unsigned int *)((char*)stavar + 544))	// Sound DDS accumulators
#define smix   ((short *)((char*)stavar + 560))		// Stereo mix for each channel
#define datend ((char*)stavar + 576)			// End of initialised variables

// VDU variables allocated in bbdata_wasm32.c:

extern int vduvar[] ;		// VDU variables
#define origx  (*(int *)((char*)vduvar + 0))	 	// Graphics x-origin (BASIC units)
#define origy  (*(int *)((char*)vduvar + 4))	 	// Graphics y-origin (BASIC units)
#define lastx  (*(int *)((char*)vduvar + 8))	 	// Current x-coordinate (pixels)
#define lasty  (*(int *)((char*)vduvar + 12))	 	// Current y-coordinate (pixels)
#define prevx  (*(int *)((char*)vduvar + 16))	 	// Previous x-coordinate (pixels)
#define prevy  (*(int *)((char*)vduvar + 20))	 	// Previous y-coordinate (pixels)
#define textwl (*(int *)((char*)vduvar + 24))	 	// Text window left (pixels)
#define textwr (*(int *)((char*)vduvar + 28))	 	// Text window right (pixels)
#define textwt (*(int *)((char*)vduvar + 32))	 	// Text window top (pixels)
#define textwb (*(int *)((char*)vduvar + 36))	 	// Text window bottom (pixels)
#define pixelx (*(int *)((char*)vduvar + 40))	 	// Width of a graphics 'dot'
#define pixely (*(int *)((char*)vduvar + 44))	 	// Height of a graphics 'dot'
#define textx  (*(int *)((char*)vduvar + 48))	 	// Text caret x-position (pixels)
#define texty  (*(int *)((char*)vduvar + 52))	 	// Text caret y-position (pixels)
#define hfont  (*(TTF_Font **)((char*)vduvar + 56))	// Handle of current font
#define hrect  (*(SDL_Rect **)((char*)vduvar + 60))	// Pointer to clipping rect
#define forgnd (*(short *)((char*)vduvar + 64))	 	// Graphics foreground colour/action
#define bakgnd (*(short *)((char*)vduvar + 66))		// Graphics background colour/action
#define cursa  (*(unsigned char *)((char*)vduvar + 68))	// Start (top) line of caret
#define cursb  (*(unsigned char *)((char*)vduvar + 69))	// Finish (bottom) line of caret
#define txtfor (*(char *)((char*)vduvar + 70))	 	// Text foreground colour index
#define txtbak (*(char *)((char*)vduvar + 71))	 	// Text background colour index
#define modeno (*(signed char *)((char*)vduvar + 72))	// MODE number (can be -1)
#define colmsk (*(char *)((char*)vduvar + 73))	 	// Mask for maximum number of colours
#define vflags (*(unsigned char *)((char*)vduvar + 74))	// VDU drivers flags byte
#define scroln (*(signed char*)((char*)vduvar + 75)) 	// Scroll counter in paged mode
#define cursx  (*(unsigned char *)((char*)vduvar + 76))	// Cursor (caret) width
#define lthick (*(unsigned char *)((char*)vduvar + 77))	// Line thickness
#define cmcflg (*(char *)((char*)vduvar + 78))		// Cursor movement control
#define tweak  (*(signed char *)((char*)vduvar + 79))	// Character spacing adjustment

#define sndqw ((unsigned char *)((char*)vduvar + 80))	// Sound queue write pointers
#define sndqr ((unsigned char *)((char*)vduvar + 84))	// Sound queue read pointers
#define eenvel ((signed char *)((char*)vduvar + 88))	// Sound envelope numbers
#define escale ((unsigned char *)((char*)vduvar + 92)) 	// Envelope scalers
#define epsect ((unsigned char *)((char*)vduvar + 96)) 	// Envelope pitch section
#define easect ((unsigned char *)((char*)vduvar + 100))	// Envelope amplitude section
#define epitch ((unsigned char *)((char*)vduvar + 104))	// Envelope pitch (frequency)
#define ecount ((unsigned char *)((char*)vduvar + 108))	// Envelope count
#define soundq ((unsigned char *)((char*)vduvar + 112))	// 4*SOUNDQL = 80
#define vduq   ((unsigned char *)((char*)vduvar + 192))	// VDU queue (different from asm version)
#define queue  (*(unsigned char *)((char*)vduvar + 202))// VDU queue status
#define kbdqw  (*(unsigned char *)((char*)vduvar + 203))// Keyboard queue write pointer
#define kbdqr  (*(unsigned char *)((char*)vduvar + 204))// Keyboard queue read pointer
#define evtqw  (*(unsigned char *)((char*)vduvar + 205))// Event queue write pointer
#define evtqr  (*(unsigned char *)((char*)vduvar + 206))// Event queue read pointer
#define keyexp (*(unsigned char *)((char*)vduvar + 207))// *KEY expansion counter
#define sizex  (*(int *)((char*)vduvar + 208))	 	// Total width of client area (pixels)
#define sizey  (*(int *)((char*)vduvar + 212))	 	// Total height of client area (pixels)
#define charx  (*(int *)((char*)vduvar + 216))	 	// Average character width (pixels)
#define chary  (*(int *)((char*)vduvar + 220))	 	// Average character height (pixels)
#define prchx  (*(int *)((char*)vduvar + 224))	 	// Average character width (printer)
#define prchy  (*(int *)((char*)vduvar + 228))	 	// Average character height (printer)
#define timoff (*(int *)((char*)vduvar + 232))		// Offset to add to TickCount
#define envels (*(signed char **)((char*)vduvar + 236))	// Pointer to ENVELOPEs (16 x 16)
#define waves  (*(short **)((char*)vduvar + 240))	// Pointer to SOUND waveforms
#define elevel ((unsigned char*)((char*)vduvar+244))	// Envelope level (amplitude)
#define prntx  (*(int *)((char*)vduvar + 248))		// Horizontal printing position
#define prnty  (*(int *)((char*)vduvar + 252))		// Vertical printing position

extern unsigned char bbcfont[] ;
extern unsigned short ttxtfont[] ;
extern int lastick ;		// To test for TIME wrapping

// System variables:

extern int sysvar[] ;		// @ variables linked list
#define memhdc (*(SDL_Renderer **)((char*)sysvar + 12))	// @memhdc%
#define wParam (*(int *)((char*)sysvar + 28))		// @wparam%
#define lParam (*(int *)((char*)sysvar + 44))		// @lparam%
#define hwndProg (*(SDL_Window **)((char*)sysvar + 60))	// @hwnd%
#define offsetx (*(int *)((char*)sysvar + 88))		// @ox%
#define offsety (*(int *)((char*)sysvar + 100))		// @oy%
#define iMsg   (*(int *)((char*)sysvar + 132))		// @msg%
#define tempo  (*(unsigned char *)((char*)sysvar + 180))// @flags%
#define sysflg (*(char *)((char*)sysvar + 181))		// *SYS flag
#define reflag (*(char *)((char*)sysvar + 182))		// *REFRESH flag
#define flags  (*(unsigned char *)((char*)sysvar + 183))// BASIC's Boolean flags byte
#define zoom   (*(unsigned int *)((char*)sysvar + 212))	// @zoom%
#define hwo    (*(SDL_AudioDeviceID *)((char*)sysvar + 328)) // @hwo%
#define platform (*(unsigned int *)((char*)sysvar + 348)) // SDL version and OS platform
#define chrmap (*(short **)((char*)sysvar + 364))		// @chrmap%
#define panx   (*(int *)((char*)sysvar + 380))		// @panx%
#define pany   (*(int *)((char*)sysvar + 396))		// @pany%
#define breakpt (*(heapptr *)((char*)sysvar + 448))	// @brkpt%
#define breakhi (*(heapptr *)((char*)sysvar + 464))	// @brkhi%
#define voices ((unsigned char *)((char*)sysvar + 508)) // Voice (waveform) for each channel

// Variables declared in bbcsdl.c:
extern SDL_Rect ClipRect ;
extern int bChanged ;
extern SDL_Texture *TTFcache[65536] ;
extern unsigned int palette[256] ;
extern size_t iResult ;		// Result from user event
extern int nUserEv ;		// Number of pending user events
extern int OSKtime ;		// On-screen keyboard timeout
extern SDL_sem *Sema4 ;		// Semaphore for user event wait
extern SDL_mutex *Mutex ;	// Mutex to protect event queue
extern void *userRAM ;		// Base of user memory
extern void *progRAM ;		// Default LOMEM
extern void *userTOP ;		// Default HIMEM
extern const char szVersion[] ;	// Initial announcement
extern const char szNotice[] ;	// Copyright string
extern int bChanged ;		// Display refresh required
extern SDL_Joystick *Joystick ;	// Handle to joystick
extern SDL_TimerID UserTimerID ;
extern int bBackground ;	// BBC BASIC in the background
extern int useGPA ;		// Use SDL_GL_GetProcAddress


================================================
FILE: bin/wasm/bbcsdl_shell.html
================================================
<!doctype html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Emscripten-Generated Code</title>
    <style>
      body {
        font-family: arial;
        margin: 0;
        padding: none;
      }

      .emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; }
      div.emscripten { text-align: center; }      
      div.emscripten_border { border: 1px solid black; }
      /* the canvas *must not* have any border or padding, or mouse coords will be wrong */
      canvas.emscripten { border: 0px none; background-color: black; }

      #emscripten_logo {
        display: inline-block;
        margin: 0;
      }

      .spinner {
        height: 30px;
        width: 30px;
        margin: 0;
        margin-top: 20px;
        margin-left: 20px;
        display: inline-block;
        vertical-align: top;

        -webkit-animation: rotation .8s linear infinite;
        -moz-animation: rotation .8s linear infinite;
        -o-animation: rotation .8s linear infinite;
        animation: rotation 0.8s linear infinite;

        border-left: 5px solid rgb(235, 235, 235);
        border-right: 5px solid rgb(235, 235, 235);
        border-bottom: 5px solid rgb(235, 235, 235);
        border-top: 5px solid rgb(120, 120, 120);
        
        border-radius: 100%;
        background-color: rgb(189, 215, 46);
      }

      @-webkit-keyframes rotation {
        from {-webkit-transform: rotate(0deg);}
        to {-webkit-transform: rotate(360deg);}
      }
      @-moz-keyframes rotation {
        from {-moz-transform: rotate(0deg);}
        to {-moz-transform: rotate(360deg);}
      }
      @-o-keyframes rotation {
        from {-o-transform: rotate(0deg);}
        to {-o-transform: rotate(360deg);}
      }
      @keyframes rotation {
        from {transform: rotate(0deg);}
        to {transform: rotate(360deg);}
      }

      #status {
        display: inline-block;
        vertical-align: top;
        margin-top: 30px;
        margin-left: 20px;
        font-weight: bold;
        color: rgb(120, 120, 120);
      }

      #progress {
        height: 20px;
        width: 300px;
      }

      #controls {
        display: inline-block;
        float: right;
        vertical-align: top;
        margin-top: 30px;
        margin-right: 20px;
      }

      #output {
        width: 100%;
        height: 200px;
        margin: 0 auto;
        margin-top: 10px;
        border-left: 0px;
        border-right: 0px;
        padding-left: 0px;
        padding-right: 0px;
        display: block;
        background-color: black;
        color: white;
        font-family: 'Lucida Console', Monaco, monospace;
        outline: none;
      }
    </style>
  </head>
  <body>
    <a href="https://www.bbcbasic.co.uk/bbcsdl/">
<img src=
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAACACAIAAAAUME9dAAAAN3RFWHRTb2Z0d2FyZQBIYW5kbWFkZSBTb2Z0d2FyZSwgSW5jLiAtIEltYWdlIEFsY2hlbXkgdjEuMTEKyLAYAQAAEABJREFUeJzsnW1sHMd5x4cvos40ZdO0VFMwo5yKoyqoF0N23cQ5CTBrIIVJOgCDKKyQL0qKggrgD3cuzERB5YSuFaSICpSsbdhkhFoE/EEiFIAfLNIJJECCTdpI1DiRWZUWWfFiSxXtXJmzLVEnirzr7C653J19uX2ZfSP/vzjCcW/vmdmZ3fnvPDPzTHWpVCIAAAAA8JfqoDMAAAAArEcgwAAAAEAA+CrA165dm5ycrK6G6hNaCPPz88PDwy+//HLQeQEAABAA/mlhoVC4ePFibW2tbymGFqq+N27cOHPmTE1NTdB5AQAAEAw+CTBV37Nnz9bV1fmTXJiR1ZeWRj6fDzo7AAAAgsEPAYb6yijVN+i8AAAACBLPBRjqKwP1BQAAIOOtAEN9ZaC+AAAAlHgowFBfGagvAAAABq8EeHFx8fz58/X19R7ZjxCVlZWfffYZ1BcAAIASrwT4xRdfbGhoIKISe5RE+JFWPNN/L168CPUFAACgxCsBvnLlytzcHFXfnTt3rk8NprorRx3B6mcAAAAMXglwtQiV3mQyWSgUPEolzMRiMYT9AgAAYITn8rAoIv9ZU1MjuabXHrTHv7CwIP+5Pvv9AAAALOJr/6yurm56ejqVSvmZqG8cP348kUhAdwEAAFjBPwGmfV+qvvv37/ctRZ959tlnL1y4cOXKlcrKyqDzAgAAIOz4J8ANDQ1rte9LicfjMzMz9MPk5GQsFgs6OwAAAMIOpghxQFZfAAAAwCKBCfC3v126dSuoxHny8cdkbCzoTAAAAIgagQkwVd+1IcBr4yoAAAD4TPAuaFsLZSsrSVWVZ1lRsLREikWzE+i35icAAAAAJgQpwFRN776b/PrXZMMGq+dfv04+/9zjbIls2kS2bjWUWCrP9NsHHkD3FwAAgEMCE2CqpjdvkpGRoNIvA5V5c6WfmSF33UXa2vzKEAAAgLVFYAJM+76/+EVQifOBdn9//3ty331B5wMAAEAECUyA33svqJR5Mj1NWlqCzgQAAIAIEpgAv/9+UClz5ty5oHMAAAAgggQ6C7qXkLS1Mw8R8ktCfueZESVxQsyDamwnJGstRQAAAMCAQAU4b/nMfxH/6yHkeW+MyPxYPMGcmXJGAAAAgHIEvw7YBj2EfEfsgHpkZEbs/vqWEwAAAOuYSAkwEQUy7toDrGskbll9OeYEAADAeiU0Alxh+q2ybzpjfLJjI7sJYWZl6w70xtXDw/TzwxYGlQEAAAANoRFgc7ar5bOXkAxXI/s1Z2b1LGRXjMjshwADAABwQkQEmIjKV1r5nOdtpKA+J2tsIavW4ILxmQAAAIAx0RFg38jaOaHeq1wAAABY20CAHWE+2AwAAACUI5oCHAuNEQAAAMAR0RFg5dSnE4EaAQAAAFwTEQFWzl7OOp14zMUIAAAAwIPQCHCp/CkCWdP4U1yMAAAAAN4TGgG2CBfhhPoCAAAImqgJMAAAALAmiJoAz/Dov3IxAgAAALggNAJsMYxz3FQ+uRgBAAAAvCc0AmzOdrV87nY0h5mLEQAAAIAHERFgog7jvN+pdnIxAgAAALgmOgKspBAaIwAAAIAjoinAgSN3o/scbYwIAABg3QMB1hAvtyFSXPE5710+AAAArGWiI8DKMM71vI3E1OeYbAkcVxuJGZwWBkYPVrQNmJ6RSqVIMtnZ0d3emkgEYLAs06Ojp4eHhyYmyPj4uE46He2trTzSEfD56qb79jRnpGtK9U6NpV0ZnJ4ePX30yNCEopRSqa7Ozo72tFn5qC+5a6TU3+ogbR/riEm4j17zwEqiNL3k4cF+b9LyAy6VaIpQJUSolF0dOxzVijot9/etNXQLJpXsPNxtWjCuEjx64MhqekI1HObVpqmJiADPqPudGd5GThDyA/WZuhocV6svifqODsIdRv8/MJChN1nXiPvWi5dBsW3NDIwbfa9MR0ip16PHwzhVt8U1ejQjX9145uho2on2CUz3HTygV1I0n/S/TEYsHC8aqiDraHr04IE2JmkhvcuEOCzGYPGpEiVFEf4dkJo/z24OTujVs8i4QBu9tbg0W+VSFKqBJkZLa7Cf8xtHaATYYhhnwiMWtNbI71YWKckwQmtkJGs5xbAzPtDWPMHzbnZmsFyzrp9Spk0SRf+aE5fFNTqs6rQMHOnrbrX/aCt60YaIhTPEtZkKuo5GDzZb7fNFgIAqcdWud+9objDUXjXic8irJ16mKmhpNU9cGhlz+q6sR2gE2CJZHpqna0Q6GPc3JyFDuJuJM0ckD4MWnzmT1DJtE8Qft5iUnsPimu47wgjI+NDp6bTNfFMdKtdwy+YH2g7s4lIwwdfR6ME1pL7BVKLGsDfy7oqpYct32XimeQ+Hx95SVdBK2MOzEiIlwD2EPO+lEdqj/bF4gj858RedET5pbIXpygy0HeywpCmcDRq9fdLX886O9vZmklC6L6enp8nUlDD2OOBCDUzgXlxKQ6eHNHm27YZmdYjx8S6Pmw2M8yydENQRc9mCB7Lb+8EHr+BfieYD+StVomOTa1eSM6lU12FFNes8iOOZA33tbvJOb23mxlr1CkyP9h1oU44YuUxLSaACXG/5zEOE/NIgbgYXIzJUVgfL+Z/XjOc5kWilbX66m2lWB4ZH+1sddYIdG9Rr2U0dY0JLn0ikW2l6/c58ovbhVVzK4V8FttzQ6j40lSHWL7aSWXXb4YZQ1JHada+97EjhfyUqqkScaMT4MmhX8uAOjg4wDuiN8UrF0r5LdT+6mkjBPpPqqqDJjU3tUIx7cJTgQAU4w2MRLRcjSrLlYkqvNRLpwd4h5b3sXIEdGdRp2VO9I4M2BqWkdqpfaOOHHeTXHi6LS+t+XsGGG1rVh071Dho2PELbUWoXCthq/gwSDEcdTV+eUGagO0xSYRvfK1FtNNHaP1bqZkcUOHtY3dE1MmXsFU+kx0YuKSdlO5xIQTRvQr1T2qqgpTXSNaCQYDdyryBSLmjgEYn2zlRG4ZOauDxNXA0H2TA43XeAadlNHzvTVFu5PBPl03FRXGr3s7AuZHVxhfWneuqSwkhyR5m0aVM1RQ6etpZBPUJTR/auO+T4XIn6VqkKT7FdSY4eVhd0jEyVWynV2t2bGlD4hh1MpBBQd3+7DhuYUKfmXO5VQIABJbEjSe/fAAxqmnbx9TPwh78MzotL/aynOgcHyYHmVS3n9FRrSaT7005/G546UneAdzUHkIUgcVOJpmaZrmQoJLjVilOJeRUevzRFj9lNiRnW6DBMV52aU7lXAwEGAcIOh3aNBP3cewvzrNN37QQ53JVZbfycPNVuRwzKsN7qKBg8rsQyqP2rHD2sXsOh52BZfz1RYAhwsMSNB5ytL2p2j6prwcO5Z8kgOxzaNRKFZ544Li7mepefdbVny1rT17wrpWh3nMzEtkpk6yj8+FeJFmAlONgXAh9RP8um+svqvbMOtxoIcJDU1dUFnQURdg6g+V3IyyCzGic6c2ocFhcz/CtfbiKt6gRbcUOzo9ADbRXE6aisKaGoI/3VT+OZ5orM8meTxTc6cQxXAhlaCMylir2oTEVYD31keS2PuErGfuH7VonWYAZU14kCMw9luWEN9UuT67kyEOAAaWxs/N73nn3hBZ2vrl4lTU1+5YNdAee6j2PRINu2d7ZHwrHpuLjY4V/F5bZ2dJEBW25oRrSJ0Hw3T3APlRfROpIwXvi0GsjQkXSywUjGhTW0A/aDIvpUiZazo34hiIQCq/uvrqcFlJ8Kx7sLDAEOBqq+hw4d0t1NKZ8nP/kJeeUVr7NAuwbCknx1C6U7Bd8bg6pJoOFv290Wl3b4V/GnAzd0a/9U74S6YyiEyhMjGnELTRGxOlrFaiBDBxFFjQJhOglU5UslWoYZUOXQv/Mc9Q3qYOhMbaA8vLvAEOAAkNQ3T5VWAz32wx/SE/gnOtBWUWavH5sRYV0a5D7szBfOxaU//LuKAze0NHt1j2ZPAqk3xiW6b8jryBB7waKliKLWfL+s/0OF4QIWE7yvRBuo1YXHEKfH2JhApQ/nHrR9IMB+E4j6lifV1dnRzvNhL2fQ7qtnuLBZXEbDvwrsu6GFHwmrOHU20lmO7uu2AQ9JHVGRKonrb1SDwUab4Wk10kKAR2u918vSgiyFMiriSTkeuvG4Em0QsS5wubdaL+Dtgw5egDdtIlu3kmIx6HzYobqaTE46+SGjvvH46ldBqi+Rd6vh99bN3WCosHd1JsO/qziZDU3ExaFj7R16DtdQxtj3GnbRso5MywEeVYVmYfHrQCbDGlyOJ9V38ChxMz0NlegA7lNHgyBgAd65kzQ0kDt3gs2FE1payLlz9n6iVd+ZlaDTAavvKtyf97XdgFi6OvZF3chR6cQNvfxL3aiCyzkMb4x9D2BedcwuXCi0EaKY5GzlnSfVO6hjMCFGu3ZJCCqRGXIINcxTFZ01FGqCEeCZmRll5289ELj66q/UELdHOX16eEjpALO2zZ5Lg+rxptDBr7iYmcRmL+pMJ9jeQn/jBtxxjP2Q15EW1ZigvliqYCZBlZv4a8GiSzyoROeEeMyfdXQ4GX53ljDnQWP/BHhhYYGK0OzsrKi+cd/SDQOBq68h4vYo6XRrWvDIKWeuOA3KbtlgxMabJBwUFxtIquzsrlUcxCMyasCdVWfU6kitv5bmbKvX3pgrsF+zwPlWog2YSe/hjfWp2bzI6YsJ/8gaNvFPgOfm5s6cOXP16tU1rL6FQqGyspI5GF71VZFgl0S4DUdXziAz5ZJLZFX/sFpc6nmadnEWG1qMsM+OKDqqzmjVkTpUtEW1VCuw6TuGrz1CfpVoGeZeDW0HmN0T2k/vs+t1Twy+uqBzuVx1dTVVqVgs5me6/kCv6+zZs0xwq4iorwS70Z7rpfimBtlA6iFv3bVYKC7jvQct4rhUNCOcjqozWnXkbK8kVScoXEtv+FSiVRj9DeukJo38uhoWsLmul/uyJb/HgKkAv/XWW8VoTXpeYdv8tu9/6fv0w8/e/9mHtR8y39K+b5TVV4TxObp/2s0Msq17VALAr1KuuJjhXye4KRUO8X2jX0dRx68gzZqg3+HUX0Z+Xe8MYtMHzbsDHMQkrJqaGv8TdU/DQsMTrU/Mxmbp5wtNF3711q/mauZMzt+2bVtLSwvtFkt/RkB9BbhPuzEzqAmG69VmfJ5hXlw2puQyP1RGIHZTKkx8XweDuFGqI1VtWL7W0O9x6L4SLaDZ8yqU+quRX/cvg+r192Veb/jH7Qh+HXBUqCnWSOpLoR/onyYnJxKJRx55JGrqSzwIvWBqkA2GG8BMT3eYXp1p8ElTys6Gnu7rm0qnrawSdr1dW4TqyJkz2ZnjmgM+VmLZnDCxS0K5qIfJpZuouUqYTanMFJiJp8NjTp5XApzP5+vr64nohpV1KNJQxT33h3MtX2yhn+mHmm01jZWNumc2NDQ89NBDs7Oz0p/RUV/NQkD3r3jlDLIONpczPYX4+5fbfYtlb3Z1rsL0qLmDUM8AAAv/SURBVFVPz/E71LaH2C4nZ/ISnTpStaXW+urqavK5A+xjJZowepDZa8r71VYOYBYe8cuj9T0oPNBfzwT4tddee+aZZ+IiHiURIC30f9aIkvpq/VCun3ULBjXNO+1i7blkf0eYlb1vUr3tDjNrG7OrsxB80hTGM6YjJmI5jYyZ9wLUC3OcyktU6oh9bykb24pt1X3fbcLHStRFZ6fHUMov85LgeuhXicUAOMy9wmnlsYcu6LxAzDv74cex+lYHMTKgjaHrchzIqkHtljDyjjDWAuQbbjvnJeZXZyn4pClWgnKMD7RVTPSODBoEw2R9di7kJSp1xMbzbDbpYmrEx7doDir8q0S13dUo1gpSXKWNE659z9N9y6G2DbaMZO8anRc3TQeck4/ew5aedoIJebinx7sUQo1j9Y3F6MPhWbZYxNhO2n32iOMZDk4MJtJjU4R9FRd3hBF2bO083NHe3JxQbs4mJ6IOqe891q7OavBJU9SuMcP5x+OZtuaMtN3AahmJresRddm4bLojUkc6Q9YVQ+rNGJZ3Y2BrkMeMHqf4U4lCjZhViaC+4Rvcd935FQws3xBGQeuYu0Zy8OhsuCFngturmqddre2EZL20H17cqO/sLDl2jPz855yzZCMCExGfxXKPIl+DQvu+Qy8C3/iAuHW61WR4+c/cXJ2N4JNm2IgNvbw3hFkOORRM2OpIH93Oerns8ZrR4wYulWjvvlWY7rI/oiC83GSs2ncWylrrZ7JygarE2FA4+oO8mrg6xpXB9V7xToCfl9S3VPIshSjgQH17ez3NkQUcPixuDerG/rGRSFA7PrBXx64+cu6sMnRDJ9KDI+RAW8ZiQfGr0EjUkdGLQqCZ0hJYJWosh3WvFM30MC8Rd2auaCuj7rx99B4J8CQhPd5YjhK5HHnuuWipL/dn0aZBKQyuju/NLIlU1+HB7tZEENqrc3XqN253jl9jN3SiNT1Warcwssq/dY1CHVl8URCzFZz2BFiJktngnpzyaDu/zlBPZzR1SLX2l3R3Zl7GiZegHB4J8De8MRsxTp4kmzdbOjNY9U2lUslk566Odl779ro0KG6y2tovjtWdHr40NDFBxtUtPU2A0BQ6Otpb/W89Ta+Oy/DvKuZuaGlj2/7p0b7Tw0NDE8pCom0rLR/vdmIOeR2JWRReFAwKJ5XsVA0LB4i/lSjUilgtIbl6A3RmZztG8C6TlUlYVEJNHVLizszdwhwBxTi5OMnBmwLzQoCfF3vA653z50k2S9SxKfXxSn3p+1zJ/TalXhosg7BzerqVpP1Jjc/VJWifhmuGLWRLLKa0g1Q5XLKvdeSkcB0Xjoh/t3yQlRi+tPg+RoKqpq3nO7H8TsQtfRO8EOAeD2xGjFyOnDplqfurq76PPfaYJ9kCAAAQGrgL8HbeBiPJyZNEjANWBl31jcfj77zzjifZAgAAEBr4CnB23a47UmLR+WykvjPyAiYAAABrF74CzHZ/33zzyVisYPKDYnEpilsTVlRUVFUJRVcoxOLx7M6dk/JXFp3PUF8AAFjncBRgVn2/+93jjY2zJj9YWlpqbGzcurXxzp3FCMkwVd+FhYXLly9TGaUX+OSTbyq/teJ8hvoCAADgJcCTjPP5/PkWKk7m3V8ixKnI5nLTjSJR0eCqqqpr16Zqaxfm5uoPHDiu/KqvT1BWqq8mQH0BAAAQfgKsWviby20+dWrf5s25sj+rEsnlcp988gn9s1RdVRRdu5VLi9IH5WeOBzcuLVWLOx4siti9Wprn+fl79u07pbzGfF4Y+jXv/kJ9AQAASHARYHbh78mT++vr89Z/L8lwsarq7usfN3wwRY/M/UUz/VCiInlzfvavH95y8b84Hqy9OX/ur740+Z+/pQebmpqSyaRdDV5crI7Hs48/fk55sLubWjP7FdQXAACAjHsBnmQW/p4/35LNxuvqbtg1dPueTX/z3HOFmns3LMwXGu774tnz9OAH3+r48r+9eKemluPBm3/3zWN9/y4l+tJLL9H+t92s5vP16XSv8khfX5mQk1BfAAAAStwLMBt18sSJ/SZzr2IrA6S00yk7gekH2v3dcvl/qknlpmIx99Dupt9erK3eULG4dHdFxQZSEeN3cOPS0uid21IeGhsbaepylgq3Fyoqq+iHUnFJ+iB8XrrDXMKNG3V2nc9QXwAAAAwuBZh1Pvf1ZUyGfuvr60+cOEEF78aNG3v37r1w4QIR4pImJyYmqAZ/duvWV370T/Rg5eJiMrn34uQkPXjr2h+++qMf8D249PH1np4eepCq7+TkpJR6/tPPvtn+t59+JDjAN275wu0/fkQ1eKkwf++uryo1mL4tNDVdteV8hvoCAADQ4lKAe5R/5PP12WzcaPSX6u6pU6feffdd+rmjo6N3RZE2b9789ttvSwdf+ecXpINba+/+zciodwepAEsH6Wcp9ce/9uQn54buVG4oLhTuu+uez6feowc3NT/CXMXsbOMLLxxWHjF3PkN9AQAA6OJGgNmFv93d/0p7h0Zn19XV0b4mczCRSEiSHPjBv3zw/sXLpRIp1j7YfOvaFKmsKi3euWvr9lJxST6fvmEcPfqs0oK58xnqCwAAwAjHApzVLvw1dz6//vrre/fulcZ9c7mc7AROJpOTomc42IO/+e8r3/j633/64RRV3I1/9oWF3P+SysqbH31w786vlJaEBcrSzGemf2/ifIb6AgAAMMGxAKu6v+YLf5XOZwmlE5h++8YbbwR+8PGvPXn9zdeWXdC7n8hPCH5ppQvalvMZ6gsAAMAcZwLMOp/NF/7qOp8lQuWCrs5WV5CK6gcT8x99UCoWS4sLG7c0SS5oW85nqC8AAICyOBDgSa3z2WThr+x8JooJzyF0QV++9sfixgQ90lS7Nfnl5GKxRDNMe8OkVJR2XLDofIb6AgAAsIIDAbax8JdxPlOdC4O3WfegDBOaQ1p39PTTLynPMXI+Q30BAABYxK4A21v4q3Q+JxIJaeGvEj+9zXLqcuBJevDtsXHlabS/XigUlEe0Qa+MnM9QXwAAANaxJcCTthb+ys5nKmn0XyqKtAf86KOPkiBmQUtZoqnTb6nuPvXUU8K3/zf39D985+Z1QSA3bLp/45amxTsLN26s+tK1Qa+IgfMZ6gsAAMAWtgSYdT6bLPxlwm7ILl+JQLzNytTlmc9X3viPO5UbluY/3/atf7z1pznlabo7Lug6n6G+AAAA7GJdgFnns/nCX9q/lJ3P2r2G5CNUpbSeYS8Oyii/TWy5Z+nDylKxGHsgXlpkYz7ncputOJ+hvgAAABxgXYB7lH+U3fFX8vTW1dUJ84qbmuQQHNJX8hEpIrTkGU4mk9IJu3fv5ntQ9irTI9K3NG+F2wt/Hv/inzYIq4w23v9gUS3A+Xz9T396qOzMZ6gvAAAAZ1gUYHsLfymFQmHfvn3SZyp7VJOU30ryPDs7e+TIEfmgPBtZOS2Zy8FXX301n8/LSXd0dCxn8vbCpoQQakNY7FsqKrKnE/RK63yG+gIAAHCMFQHO2lr4K6OcTqx1BcdisePHj1tI3S2ZTCaXyykzoPwshZlkuHq1iQl6pXU+Q30BAAC4wYoAs91f8x1/KcWqqsqlJd0/pc9UfY8dO6ZcbusR9fX1VBT/v727V00YCgMwrJ0KgrgUCkJxL5SupTeSMVfh7bj2UjpKoXtGoRQcXYqNLUg4NTHWk6TV5xkkiQ7H6eV8/mS7/a1jsbiezdLgYjB8Vl8AjrQ3wGF9q3/42/tK7NXL69vd7Xd0i6fb43xznCRJmqbHLL2OfLN7UH1Xq8skeQouBsNn9QXgeNUBzoLhc5ZN5vP76k9/c8ubx4v3j52nwVPNy9/gqP6rl8tR8LujYPisvgBEUR3gcPs7mWQ/x7OnrTh8Vl8AYqkI8EN7q/irisNn9QUgoooAP7e2iL+pOHxWXwDiKg3wIV9dOkHDYW867Y3Hm2P1BSC60gDvvNX8WRkMNo/qC0ATfnE/4DOivgA0RIBLqS8AzRHgUnl9g//KVF8AYikNcL/f5jL+AfUFICI74FrUF4C4BHg/9QUgOgHeQ30BaEJpgNfrdZvrAICzYgcMAB0QYADogAADQAcEGAA68AkG0LjCwnHj5QAAAABJRU5ErkJggg=="
width="320" height="64"></a>

    <div class="spinner" id='spinner'></div>
    <div class="emscripten" id="status">Downloading...</div>

<span id='controls'>
  <span><input type="button" value="Fullscreen" onclick="Module.requestFullscreen()">
  </span>
</span>

    <div class="emscripten">
      <progress value="0" max="100" id="progress" hidden=1></progress>
    </div>

    
    <div class="emscripten_border">
      <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" tabindex=-1></canvas>
    </div>
    <textarea id="output" rows="8"></textarea>

    <script type='text/javascript'>
      var statusElement = document.getElementById('status');
      var progressElement = document.getElementById('progress');
      var spinnerElement = document.getElementById('spinner');

      var Module = {
        preRun: [],
        postRun: [],
        print: (function() {
          var element = document.getElementById('output');
          if (element) element.value = ''; // clear browser cache
          return function(text) {
            if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
            // These replacements are necessary if you render to raw HTML
            //text = text.replace(/&/g, "&amp;");
            //text = text.replace(/</g, "&lt;");
            //text = text.replace(/>/g, "&gt;");
            //text = text.replace('\n', '<br>', 'g');
            console.log(text);
            if (element) {
              element.value += text + "\n";
              element.scrollTop = element.scrollHeight; // focus on bottom
            }
          };
        })(),
        printErr: function(text) {
          if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
          console.error(text);
        },
        canvas: (function() {
          var canvas = document.getElementById('canvas');

          // As a default initial behavior, pop up an alert when webgl context is lost. To make your
          // application robust, you may want to override this behavior before shipping!
          // See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
          canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);

          return canvas;
        })(),
        setStatus: function(text) {
          if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };
          if (text === Module.setStatus.last.text) return;
          var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/);
          var now = Date.now();
          if (m && now - Module.setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon
          Module.setStatus.last.time = now;
          Module.setStatus.last.text = text;
          if (m) {
            text = m[1];
            progressElement.value = parseInt(m[2])*100;
            progressElement.max = parseInt(m[4])*100;
            progressElement.hidden = false;
            spinnerElement.hidden = false;
          } else {
            progressElement.value = null;
            progressElement.max = null;
            progressElement.hidden = true;
            if (!text) spinnerElement.style.display = 'none';
          }
          statusElement.innerHTML = text;
        },
        totalDependencies: 0,
        monitorRunDependencies: function(left) {
          this.totalDependencies = Math.max(this.totalDependencies, left);
         // Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
        }
      };
      Module.setStatus('Downloading...');
      window.onerror = function(event) {
        // TODO: do not warn on ok events like simulating an infinite loop or exitStatus
        Module.setStatus('Exception thrown, see JavaScript console');
        spinnerElement.style.display = 'none';
        Module.setStatus = function(text) {
          if (text) Module.printErr('[post-exception status] ' + text);
        };
      };
    </script>
    {{{ SCRIPT }}}
  </body>
</html>

================================================
FILE: bin/wasm/makefile
================================================
# Requires Python and the Emscripten SDK to be installed.

VPATH  = ../BBCSDL/src ../BBCSDL/include

CXX = emcc -s USE_PTHREADS=1 -s USE_SDL=2 -s USE_SDL_TTF=2 -s USE_SDL_NET=2 \
      -I . -I ../BBCSDL/include -pthread -Wall -Wno-pthreads-mem-growth

LXX = emcc -s USE_PTHREADS=1 -s USE_SDL=2 -s USE_SDL_TTF=2 -s USE_SDL_NET=2 -s MAXIMUM_MEMORY=1gb \
      -s PTHREAD_POOL_SIZE=2 -s ALLOW_MEMORY_GROWTH=1 -s WASM=1 -s ASSERTIONS=0 -s STACK_SIZE=5MB \
      -I . -I ../BBCSDL/include -pthread -Wall -Wno-pthreads-mem-growth

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o sort.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o SDL2_rotozoom.o

all: bbcsdl.html

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O3 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O3 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -c -O3 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_wasm32.c BBC.h
	$(CXX) -c -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -c -O3 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -c -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) -c -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) -c -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-value -c -O3 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) -c -O3 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h
	$(CXX) -c -Os $< -o $@

flood.o: flood.c
	$(CXX) -c -O3 $< -o $@

sort.o: sort.c
	$(CXX) -c -O3 $< -o $@

bbdata.o: bbdata_wasm32.c
	$(CXX) -c $< -o $@

bbcsdl.html: $(OBJ) Box2D231.o bbcsdl_shell.html
	$(LXX) -O3 --emrun --no-heap-copy --shell-file bbcsdl_shell.html $(OBJ) Box2D231.o \
	-lidbfs.js -o bbcsdl.html --preload-file examples/ --preload-file lib/

index.html: $(OBJ) Box2D231.o bbcsdl_shell.html
	$(LXX) -O3 --emrun --no-heap-copy --shell-file bbcsdl_shell.html $(OBJ) Box2D231.o \
	-lidbfs.js -o index.html


================================================
FILE: bin/wasm/readme.txt
================================================
If you get a build failure like:

'AssertionError: attempt to lock the cache while a parent process is holding the lock'

build the individual ports separately using:

embuilder build sdl2-mt
embuilder build sdl2_net
embuilder build sdl2_ttf


================================================
FILE: bin/win32/makefile
================================================
# Update these paths as necessary to match your installation
SDL_LIB = -LC:/SDL2-2.26.2/i686-w64-mingw32/lib -lSDL2main -lSDL2 \
          -LC:/SDL2_ttf-2.20.2/i686-w64-mingw32/lib -lSDL2_ttf \
          -LC:/SDL2_net-2.2.0/i686-w64-mingw32/lib -lSDL2_net 
SDL_INCLUDE = -IC:/SDL2-2.26.2/i686-w64-mingw32/include/ \
          -IC:/SDL2_ttf-2.20.2/i686-w64-mingw32/include/ \
          -IC:/SDL2_net-2.2.0/i686-w64-mingw32/include/ 

VPATH = ../../src ../../include
CXX = gcc -Wall -I ../../include

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o SDL2_rotozoom.o

all: bbcsdl.exe sdlrun.exe

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

# TODO: Need bbasmb_x86_32 assembler!!
bbasmb.o: bbasmb_arm_v6m.c BBC.h
	$(CXX) -c -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-array-bounds -c $(SDL_INCLUDE) -msse2 -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -c -Wno-unused-value $(SDL_INCLUDE) -O2 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) -c $(SDL_INCLUDE) -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

flood.o: flood.c
	$(CXX) -c $(SDL_INCLUDE) -O3 $< -o $@

bbdata.o: ../../src/bbdata_x86_32.nas
	nasm --prefix _ -f win32 -s ../../src/bbdata_x86_32.nas -o bbdata.o

bbcsdl.exe: $(OBJ)
	$(CXX) $(OBJ) \
	-o bbcsdl.exe -lz -lmingw32 -lpsapi -mthreads -mwindows $(SDL_LIB) -Wl,-s -Wl,--export-all-symbols

sdlrun.o: sdlrun.c
	$(CXX) -Wall -c -O2 $< -o $@

unpack32.o: unpack32.nas
	nasm --prefix _ -f win32 -s unpack32.nas -o unpack32.o

sdlrun.exe: sdlrun.o unpack32.o
	$(CXX) sdlrun.o unpack32.o -o sdlrun.exe -lmingw32 -mwindows -Wl,-s 


================================================
FILE: bin/win32/sdlrun.c
================================================
/******************************************************************\
*	  BBC BASIC for SDL 2.0 (Windows edition)		   *
*	  Copyright (c) R. T. Russell, 2024			   *
*								   *
*	  Version 1.4, 15-Nov-2024				   *
\******************************************************************/

#include <windows.h>
#include <windowsx.h>
#include <objbase.h>
#include <shlobj.h>
#include "version.h"

#ifdef __x86_64__
#define SECURITY_PTR 0x128
#else
#define SECURITY_PTR 0x118
#endif
#define STACK_NEEDED 0x400

	// Functions in BBCUPCK.NAS

void WINAPI unpack (HANDLE, char*, int, DWORD*, int) ;
BOOL WINAPI verify (HANDLE, char*, int) ;

	// Structure declaration

typedef struct tagPROGINFO {
  int DefaultRAM ;
  int Library ;
  int WindowWidth ;
  int WindowHeight ;
  int CmdShow ;
  int Flags ;
  unsigned int SerialNumber ;
  int ProgLength ;
} PROGINFO, *LPPROGINFO ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
		    PSTR szCmdLine, int iCmdShow)
    {
	char szAppName[_MAX_PATH] ;
	char szLoadDir[_MAX_PATH] ;
	char szTempDir[_MAX_PATH] ;
	char szLibrary[_MAX_PATH] ;
	char szBinaries[_MAX_PATH] ;
	char szFileName[_MAX_PATH] ;
	char szEmptyFile[_MAX_PATH] ;
	PROGINFO ProgInfo ;
	SHFILEOPSTRUCT shfo = {0} ;
	SHELLEXECUTEINFOA sei = {0} ;
	HANDLE ThisFile, EmbedFile ;
	int signature, offset ;
	int embedsize, remain, dirlen, liblen ;
	BOOL anyresources = 0 ;
	DWORD nRead ;
	char *nameptr ;
	void *pBuffer ;

	// Get the path to this file and open it:
	GetModuleFileName (NULL, szFileName, _MAX_PATH) ;

	ThisFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
			    NULL, OPEN_EXISTING, 0, NULL) ;

	// It shouldn't be possible for the file not to exist:
	if (ThisFile == INVALID_HANDLE_VALUE)
	  return 1;

	// Discover if there is a signature and if so where it is:
	SetFilePointer (ThisFile, SECURITY_PTR, NULL, FILE_BEGIN) ;
	ReadFile (ThisFile, &signature, sizeof(int), &nRead, NULL) ;
	if (signature != 0)
		nRead = FILE_BEGIN ;
	else
		nRead = FILE_END ;

	// Read the ProgInfo structure either from the end or just before the signature:
	offset = SetFilePointer (ThisFile, signature-sizeof(PROGINFO), NULL, nRead) ;
	ReadFile (ThisFile, &ProgInfo, sizeof(PROGINFO), &nRead, NULL) ;

	// Quit if there are no embedded files:
	if ((ProgInfo.Library <= 0) || (ProgInfo.Library >= offset))
	    {
		CloseHandle (ThisFile) ;
		return 0 ;
	    }

	// Find directory containing this file:
	GetFullPathName (szFileName, _MAX_PATH, szLoadDir, &nameptr) ;
	*nameptr = '\0' ;
	dirlen = strlen (szLoadDir) ;

	// Get the path to the temporary directory:
	GetTempPath (_MAX_PATH, szTempDir) ;

	// Set the path to the binaries subdirectory and create it:
	GetTempFileName (szTempDir, "BBC", 0, szBinaries) ;
	DeleteFile (szBinaries) ;
	CreateDirectory (szBinaries, NULL) ;
	strcat (szBinaries, "\\") ;

	// Set the path to the libraries subdirectory (but don't create it):
	strcpy (szLibrary, szBinaries) ;
	strcat (szLibrary, "lib\\") ;
	liblen = strlen (szLibrary) ;

	// Set the path to an empty file bin\$ (but don't create it):
	strcpy (szEmptyFile, szBinaries) ;
	strcat (szEmptyFile, "$") ; 

	// Allocate a buffer to hold the uncompressed data:
	pBuffer = malloc (ProgInfo.DefaultRAM) ;
	if (pBuffer == NULL)
		return 2 ;

	// For each of the embedded files:
	int embedptr = offset - ProgInfo.ProgLength - ProgInfo.Library ;
	while (embedptr < (offset - ProgInfo.ProgLength)) 
	    {
		int len ;
		char type ;
		SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;
		ReadFile (ThisFile, &type, 1, &nRead, NULL) ;
		ReadFile (ThisFile, &embedsize, 4, &nRead, NULL) ;
		ReadFile (ThisFile, szFileName, _MAX_PATH, &nRead, NULL) ;
		len = strlen(szFileName) ;
		embedptr += len + 6 ;

		// type == 0/1 for @dir$, type == 2/3 for @dir$\bin\lib
		if (type & 2)
		    {
			memmove (szFileName + liblen, szFileName, len + 1) ;
			memcpy (szFileName, szLibrary, liblen) ;
		    }
		else
		    {
			memmove (szFileName + dirlen, szFileName, len + 1) ;
			memcpy (szFileName, szLoadDir, dirlen) ;
			anyresources = 1 ;
		    }

		// Check if the file already exists:
		EmbedFile = CreateFile (szFileName, GENERIC_READ,
			  FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL) ;

		// If it does, verify the existing contents against the embedded data:
		if (EmbedFile != INVALID_HANDLE_VALUE)
		    {
			int diff = 0 ;
			SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;

			while ((diff == 0) && ((remain = embedptr + embedsize -
				SetFilePointer (ThisFile, 0, NULL, FILE_CURRENT)) > 0))
			    {
				nRead = ProgInfo.SerialNumber ;
				unpack (ThisFile, pBuffer, min(remain, ProgInfo.DefaultRAM),
					 &nRead, type) ;
				diff = verify (EmbedFile, pBuffer, nRead) ;
			    }
			CloseHandle (EmbedFile) ;
			if (diff)
				EmbedFile = INVALID_HANDLE_VALUE ;
		    }

		// If the file doesn't exist OR is different from the existing one, create it:
		if (EmbedFile == INVALID_HANDLE_VALUE)
		    {
			CloseHandle (CreateFile (szEmptyFile, GENERIC_WRITE, 0,
						 NULL, CREATE_ALWAYS, 0, NULL)) ;
			
			shfo.hwnd = (HWND) 1 ; // Any non-zero value!
			shfo.wFunc = FO_MOVE ;
			shfo.pFrom = szEmptyFile ;
			shfo.pTo   = szFileName ;
			shfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR ;
			*(szFileName + strlen(szFileName) + 1) = '\0' ;
			*(szEmptyFile + strlen(szEmptyFile) + 1) = '\0' ;
			SHFileOperation (&shfo) ; // Create directory if necessary

			EmbedFile = CreateFile (szFileName, GENERIC_WRITE, 0,
					   NULL, CREATE_ALWAYS, 0, NULL) ;

			if (EmbedFile == INVALID_HANDLE_VALUE)
			    {
				MessageBox(NULL, szFileName, "SDLRUN: Cannot create file", 0);
				return 3 ;
			    }

			SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;

			while ((remain = embedptr + embedsize -
				SetFilePointer (ThisFile, 0, NULL, FILE_CURRENT)) > 0)
			    {
				nRead = ProgInfo.SerialNumber ;
				unpack (ThisFile, pBuffer, min(remain, ProgInfo.DefaultRAM),
					&nRead, type) ;
				WriteFile (EmbedFile, pBuffer, nRead, &nRead, NULL) ;
			    }

			CloseHandle (EmbedFile) ;
		    }
		embedptr += embedsize ;
	    }

	free (pBuffer) ;
	ReadFile (ThisFile, szAppName, _MAX_PATH, &nRead, NULL) ;
	CloseHandle (ThisFile) ;

	// Get path to program .bbc file and hide it:
	if (anyresources)
		strcpy (szFileName, szLoadDir) ;
	else
		strcpy (szFileName, szBinaries) ;
	strcat (szFileName, szAppName) ;
	strcat (szFileName, ".bbc") ;
	SetFileAttributes (szFileName, FILE_ATTRIBUTE_HIDDEN) ;

	// Enclose in quotes in case embedded space(s):
	strcpy (szEmptyFile, "\042") ;
	strcat (szEmptyFile, szFileName) ;
	strcat (szEmptyFile, "\042 ") ;
	strcat (szEmptyFile, szCmdLine) ;

	// Run BBCSDL:
	strcpy (szLibrary, szBinaries) ;
	strcat (szLibrary, "bbcsdl.exe") ;

	/// ShellExecute ((HWND) 0, "open", szLibrary, szEmptyFile, szLoadDir, ProgInfo.CmdShow) ;

	sei.cbSize = sizeof(sei) ;
        sei.fMask = SEE_MASK_NOCLOSEPROCESS ;
        sei.hwnd = NULL ;
	sei.lpVerb = "open" ;
        sei.lpFile = szLibrary ;
        sei.lpParameters = szEmptyFile ;
        sei.lpDirectory = szLoadDir ;
        sei.nShow = ProgInfo.CmdShow ;
        ShellExecuteEx (&sei) ;

	// Wait for process to finish:
        if (sei.hProcess)
	    {
		DWORD res ;
		do res = WaitForSingleObject (sei.hProcess, 1000) ;
		while (res == WAIT_TIMEOUT) ;
		CloseHandle (sei.hProcess) ;
	    }

	// Delete the binaries directory and all the files it contains:
	*(szBinaries + strlen(szBinaries) + 1) = '\0' ;
	shfo.hwnd = (HWND) 1 ; // Any non-zero value!
	shfo.pFrom = szBinaries ;
	shfo.wFunc = FO_DELETE ;
	shfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR ;
	SHFileOperation (&shfo) ; 

	return 0 ;
    }


================================================
FILE: bin/win32/unpack32.nas
================================================
;/*****************************************************************\
;*       BBC BASIC for SDL 2.0 (Windows edition)                   *
;*       Copyright (c) R. T. Russell, 2023                         *
;*       aPLib courtesy of Joergen Ibsen, www.ibsensoftware.com    *
;*                                                                 *
;*       UNPACK.NAS Compressed file unpacker (32-bit version)      *
;\*****************************************************************/
;
        GLOBAL  unpack@20,verify@12
        EXTERN  ReadFile@20,SetFilePointer@16
;
        SEGMENT .text
;
BUFSIZ  EQU     512
;
verify@12:
        pushad
        mov     ebp,esp         ; Save stack pointer
        mov     edi,[ebp+40]    ; Data pointer
        mov     ecx,[ebp+44]    ; Data size (bytes)
        mov     ebx,-BUFSIZ     ; V1.1
        and     esp,ebx         ; Align
        neg     ebx             ; mask -> BUFSIZ
        sub     esp,ebx         ; Make space on stack
        mov     esi,esp         ; Buffer pointer
vloop:  mov     eax,ecx         ; Get remaining size
        cmp     eax,ebx         ; Remaining > BUFSIZ ?
        jbe     vloop1
        mov     eax,ebx         ; If so, use BUFSIZ
vloop1: push    eax             ; Save bytes to load/compare
        push    ecx             ; Save bytes remaining
        push    eax             ; Make space for NumberOfBytesRead
        mov     ecx,esp
        mov     edx,[ebp+36]    ; File handle
        push    byte 0          ; lpOverlapped
        push    ecx             ; lpNumberOfBytesRead
        push    eax             ; nNumberOfBytesToRead
        push    esi             ; lpBuffer
        push    edx             ; hFile
        call    ReadFile@20
        pop     eax             ; Discard NumberOfBytesRead
        pop     eax             ; eax = bytes remaining
        pop     ecx             ; ecx = bytes to compare
        sub     eax,ecx         ; Adjust bytes remaining
        jecxz   vloop2
        push    esi
        repz    cmpsb           ; Compare file with memory
        pop     esi
vloop2: xchg    eax,ecx         ; ecx <- remaining, eax <- result
        jnz     vloopx          ; Different, so bailout
        or      ecx,ecx         ; Anything remaining?
        jnz     vloop           ; Continue comparing
vloopx: mov     esp,ebp         ; Restore stack pointer
        mov     [ebp+28],eax    ; Result
        popad
        ret     12              ; WINAPI calling convention
;
unpack@20:
        and     dword [esp+20],byte 1 ; Test bit 0, zero remainder
        jz      near ReadFile@20     ; n.b. lpOverlapped = NULL
        pushad
        mov     ebp,esp
        mov     edx,[ebp+36]    ; hFile
        mov     edi,[ebp+40]    ; lpBuffer
        mov     eax,[ebp+48]    ; &nRead
        mov     eax,[eax]       ; nRead
        mov     ebx,-BUFSIZ     ; Mask
        and     esp,ebx         ; Align stack pointer
        mov     esi,esp         ; Initial buffer pointer
        neg     ebx             ; Mask -> BUFSIZ
        sub     esp,ebx         ; Make space on stack for buffer
        push    edx             ; hFile [esi-4]
        push    eax             ; Space for last block size [esi-8]
        push    eax             ; nRead [esi-12]
        push    ebp

        mov     dl,80H
        xor     ebx,ebx
literal:
        call    getbyte
        stosb
        mov     bl,2
nexttag:
        call    getbit
        jnc     literal
        xor     ecx,ecx
        xor     eax,eax 
        call    getbit
        jnc     codepair
        call    getbit
        jnc     shortmatch
        mov     bl,2
        inc     ecx
        mov     al,10H
getmorebits:
        call    getbit
        adc     al,al
        jnc     getmorebits
        jnz     domatch
        stosb
nextt1: jmp     short nexttag
;        
codepair:
        call    getgamma
        sub     ecx,ebx
        jnz     normalcodepair
        call    getgamma
        jmp     short domatch_lastpos
;        
shortmatch:
        call    getbyte
        shr     eax,1
        rcl     ecx,1            
        jnz     domatch_with_2inc

        pop     ebp             ; saved stack pointer
        pop     eax             ; discard SerialNumber
        pop     eax             ; last block size
        pop     edx             ; hFile
        mov     esp,ebp         ; Restore stack pointer
        and     esi,BUFSIZ-1    ; Get offset into buffer
        jz      noptradj
        sub     esi,eax         ; How much to adjust pointer
        push    byte 1          ; dwMoveMethod = FILE_CURRENT
        push    byte 0          ; lpDistanceToMoveHigh
        push    esi             ; DistanceToMove (negative)
        push    edx             ; hFile
        call    SetFilePointer@16
noptradj:
        sub     edi,[ebp+40]
        mov     esi,[ebp+48]    ; &nRead
        mov     [esi],edi       ; return unpacked length
        popad
        ret     20              ; WINAPI calling convention
;        
normalcodepair:
        xchg    eax,ecx
        dec     eax
        shl     eax,8
        call    getbyte
        call    getgamma
        cmp     eax,32000
        jae     domatch_with_2inc
        cmp     ah,5
        jae     domatch_with_inc
        cmp     eax,byte 7FH
        ja      domatch_new_lastpos
domatch_with_2inc:
        inc     ecx
domatch_with_inc:
        inc     ecx
domatch_new_lastpos:
        xchg    eax,ebp
domatch_lastpos:
        mov     eax,ebp
        mov     bl,1
domatch:
        push    esi
        mov     esi,edi
        sub     esi,eax
        rep     movsb
        pop     esi
        jmp     short nextt1
;        
getbit:
        add     dl,dl
        jnz     stillbitsleft
        xchg    al,dl
        pushf
        call    getbyte
        popf
        xchg    al,dl
        adc     dl,dl
stillbitsleft:
        ret
;        
getgamma:
        inc     ecx
getgammaloop:
        call    getbit
        adc     ecx,ecx
        call    getbit
        jc      getgammaloop
        ret
;
getbyte:
        test    esi,BUFSIZ-1
        jnz     getbyt1
        sub     esi,BUFSIZ      ; Address start of buffer
        pushad
        push    eax             ; Make space for NumberOfBytesRead
        mov     ecx,esp
        push    byte 0          ; lpOverlapped
        push    ecx             ; lpNumberOfBytesRead
        push    dword BUFSIZ    ; nNumberOfBytesToRead
        push    esi             ; lpBuffer
        push    dword [esi-4]   ; hFile
        call    ReadFile@20
        pop     dword [esi-8]   ; NumberOfBytesRead (may not be BUFSIZ)
        popad
getbyt1:
        lodsb
        ret


================================================
FILE: bin/win64/makefile
================================================
# Update these paths as necessary to match your installation
SDL_LIB = -LC:/SDL2-2.26.2/x86_64-w64-mingw32/lib -lSDL2main -lSDL2 \
          -LC:/SDL2_ttf-2.20.2/x86_64-w64-mingw32/lib -lSDL2_ttf \
          -LC:/SDL2_net-2.2.0/x86_64-w64-mingw32/lib -lSDL2_net 
SDL_INCLUDE = -IC:/SDL2-2.26.2/x86_64-w64-mingw32/include/ \
          -IC:/SDL2_ttf-2.20.2/x86_64-w64-mingw32/include/ \
          -IC:/SDL2_net-2.2.0/x86_64-w64-mingw32/include/

VPATH = ../../src ../../include
CXX = gcc -Wall -I ../../include

OBJ = bbmain.o bbexec.o bbeval.o bbcmos.o bbccli.o \
      bbcvdu.o bbcvtx.o flood.o bbdata.o bbcsdl.o \
      bbasmb.o SDL2_gfxPrimitives.o SDL2_rotozoom.o

all: bbcsdl.exe sdlrun.exe

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbcmos.o: bbcmos.c bbcsdl.h
	$(CXX) -Wno-array-bounds -c $(SDL_INCLUDE) -msse2 -O2 $< -o $@

bbccli.o: bbccli.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

bbcvdu.o: bbcvdu.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

bbcvtx.o: bbcvtx.c bbcsdl.h
	$(CXX) -c $(SDL_INCLUDE) -O3 $< -o $@

bbcsdl.o: bbcsdl.c bbcsdl.h version.h
	$(CXX) -Wno-unused-value -c $(SDL_INCLUDE) -O2 $< -o $@

SDL2_gfxPrimitives.o: SDL2_gfxPrimitives.c SDL2_gfxPrimitives.h
	$(CXX) -c $(SDL_INCLUDE) -O2 $< -o $@

SDL2_rotozoom.o: SDL2_rotozoom.c SDL2_rotozoom.h SDL2_gfxPrimitives.h SDL_stbimage.h stb_image.h dr_mp3.h
	$(CXX) -c $(SDL_INCLUDE) -Os $< -o $@

flood.o: flood.c
	$(CXX) -c $(SDL_INCLUDE) -O3 $< -o $@

bbdata.o: ../../src/bbdata_x86_64.nas
	nasm -f win64 -s ../../src/bbdata_x86_64.nas -o bbdata.o

bbcsdl.exe: $(OBJ)
	$(CXX) $(OBJ) \
	-o bbcsdl.exe -lz -lmingw32 -mthreads -mwindows $(SDL_LIB) -Wl,-s -Wl,--export-all-symbols

sdlrun.o: sdlrun.c
	$(CXX) -Wall -c -O2 $< -o $@

unpack64.o: unpack64.nas
	nasm -f win64 -s unpack64.nas -l unpack64.lst -o unpack64.o

sdlrun.exe: sdlrun.o unpack64.o
	$(CXX) sdlrun.o unpack64.o -o sdlrun.exe -lmingw32 -mwindows -Wl,-s 


================================================
FILE: bin/win64/sdlrun.c
================================================
/******************************************************************\
*	  BBC BASIC for SDL 2.0 (Windows edition)		   *
*	  Copyright (c) R. T. Russell, 2024			   *
*								   *
*	  Version 1.4, 15-Nov-2024				   *
\******************************************************************/

#include <windows.h>
#include <windowsx.h>
#include <objbase.h>
#include <shlobj.h>
#include "version.h"

#ifdef __x86_64__
#define SECURITY_PTR 0x128
#else
#define SECURITY_PTR 0x118
#endif
#define STACK_NEEDED 0x400

	// Functions in BBCUPCK.NAS

void WINAPI unpack (HANDLE, char*, int, DWORD*, int) ;
BOOL WINAPI verify (HANDLE, char*, int) ;

	// Structure declaration

typedef struct tagPROGINFO {
  int DefaultRAM ;
  int Library ;
  int WindowWidth ;
  int WindowHeight ;
  int CmdShow ;
  int Flags ;
  unsigned int SerialNumber ;
  int ProgLength ;
} PROGINFO, *LPPROGINFO ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
		    PSTR szCmdLine, int iCmdShow)
    {
	char szAppName[_MAX_PATH] ;
	char szLoadDir[_MAX_PATH] ;
	char szTempDir[_MAX_PATH] ;
	char szLibrary[_MAX_PATH] ;
	char szBinaries[_MAX_PATH] ;
	char szFileName[_MAX_PATH] ;
	char szEmptyFile[_MAX_PATH] ;
	PROGINFO ProgInfo ;
	SHFILEOPSTRUCT shfo = {0} ;
	SHELLEXECUTEINFOA sei = {0} ;
	HANDLE ThisFile, EmbedFile ;
	int signature, offset ;
	int embedsize, remain, dirlen, liblen ;
	BOOL anyresources = 0 ;
	DWORD nRead ;
	char *nameptr ;
	void *pBuffer ;

	// Get the path to this file and open it:
	GetModuleFileName (NULL, szFileName, _MAX_PATH) ;

	ThisFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
			    NULL, OPEN_EXISTING, 0, NULL) ;

	// It shouldn't be possible for the file not to exist:
	if (ThisFile == INVALID_HANDLE_VALUE)
	  return 1;

	// Discover if there is a signature and if so where it is:
	SetFilePointer (ThisFile, SECURITY_PTR, NULL, FILE_BEGIN) ;
	ReadFile (ThisFile, &signature, sizeof(int), &nRead, NULL) ;
	if (signature != 0)
		nRead = FILE_BEGIN ;
	else
		nRead = FILE_END ;

	// Read the ProgInfo structure either from the end or just before the signature:
	offset = SetFilePointer (ThisFile, signature-sizeof(PROGINFO), NULL, nRead) ;
	ReadFile (ThisFile, &ProgInfo, sizeof(PROGINFO), &nRead, NULL) ;

	// Quit if there are no embedded files:
	if ((ProgInfo.Library <= 0) || (ProgInfo.Library >= offset))
	    {
		CloseHandle (ThisFile) ;
		return 0 ;
	    }

	// Find directory containing this file:
	GetFullPathName (szFileName, _MAX_PATH, szLoadDir, &nameptr) ;
	*nameptr = '\0' ;
	dirlen = strlen (szLoadDir) ;

	// Get the path to the temporary directory:
	GetTempPath (_MAX_PATH, szTempDir) ;

	// Set the path to the binaries subdirectory and create it:
	GetTempFileName (szTempDir, "BBC", 0, szBinaries) ;
	DeleteFile (szBinaries) ;
	CreateDirectory (szBinaries, NULL) ;
	strcat (szBinaries, "\\") ;

	// Set the path to the libraries subdirectory (but don't create it):
	strcpy (szLibrary, szBinaries) ;
	strcat (szLibrary, "lib\\") ;
	liblen = strlen (szLibrary) ;

	// Set the path to an empty file bin\$ (but don't create it):
	strcpy (szEmptyFile, szBinaries) ;
	strcat (szEmptyFile, "$") ; 

	// Allocate a buffer to hold the uncompressed data:
	pBuffer = malloc (ProgInfo.DefaultRAM) ;
	if (pBuffer == NULL)
		return 2 ;

	// For each of the embedded files:
	int embedptr = offset - ProgInfo.ProgLength - ProgInfo.Library ;
	while (embedptr < (offset - ProgInfo.ProgLength)) 
	    {
		int len ;
		char type ;
		SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;
		ReadFile (ThisFile, &type, 1, &nRead, NULL) ;
		ReadFile (ThisFile, &embedsize, 4, &nRead, NULL) ;
		ReadFile (ThisFile, szFileName, _MAX_PATH, &nRead, NULL) ;
		len = strlen(szFileName) ;
		embedptr += len + 6 ;

		// type == 0/1 for @dir$, type == 2/3 for @dir$\bin\lib
		if (type & 2)
		    {
			memmove (szFileName + liblen, szFileName, len + 1) ;
			memcpy (szFileName, szLibrary, liblen) ;
		    }
		else
		    {
			memmove (szFileName + dirlen, szFileName, len + 1) ;
			memcpy (szFileName, szLoadDir, dirlen) ;
			anyresources = 1 ;
		    }

		// Check if the file already exists:
		EmbedFile = CreateFile (szFileName, GENERIC_READ,
			  FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL) ;

		// If it does, verify the existing contents against the embedded data:
		if (EmbedFile != INVALID_HANDLE_VALUE)
		    {
			int diff = 0 ;
			SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;

			while ((diff == 0) && ((remain = embedptr + embedsize -
				SetFilePointer (ThisFile, 0, NULL, FILE_CURRENT)) > 0))
			    {
				nRead = ProgInfo.SerialNumber ;
				unpack (ThisFile, pBuffer, min(remain, ProgInfo.DefaultRAM),
					 &nRead, type) ;
				diff = verify (EmbedFile, pBuffer, nRead) ;
			    }
			CloseHandle (EmbedFile) ;
			if (diff)
				EmbedFile = INVALID_HANDLE_VALUE ;
		    }

		// If the file doesn't exist OR is different from the existing one, create it:
		if (EmbedFile == INVALID_HANDLE_VALUE)
		    {
			CloseHandle (CreateFile (szEmptyFile, GENERIC_WRITE, 0,
						 NULL, CREATE_ALWAYS, 0, NULL)) ;
			
			shfo.hwnd = (HWND) 1 ; // Any non-zero value!
			shfo.wFunc = FO_MOVE ;
			shfo.pFrom = szEmptyFile ;
			shfo.pTo   = szFileName ;
			shfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR ;
			*(szFileName + strlen(szFileName) + 1) = '\0' ;
			*(szEmptyFile + strlen(szEmptyFile) + 1) = '\0' ;
			SHFileOperation (&shfo) ; // Create directory if necessary

			EmbedFile = CreateFile (szFileName, GENERIC_WRITE, 0,
					   NULL, CREATE_ALWAYS, 0, NULL) ;

			if (EmbedFile == INVALID_HANDLE_VALUE)
			    {
				MessageBox(NULL, szFileName, "SDLRUN: Cannot create file", 0);
				return 3 ;
			    }

			SetFilePointer (ThisFile, embedptr, NULL, FILE_BEGIN) ;

			while ((remain = embedptr + embedsize -
				SetFilePointer (ThisFile, 0, NULL, FILE_CURRENT)) > 0)
			    {
				nRead = ProgInfo.SerialNumber ;
				unpack (ThisFile, pBuffer, min(remain, ProgInfo.DefaultRAM),
					&nRead, type) ;
				WriteFile (EmbedFile, pBuffer, nRead, &nRead, NULL) ;
			    }

			CloseHandle (EmbedFile) ;
		    }
		embedptr += embedsize ;
	    }

	free (pBuffer) ;
	ReadFile (ThisFile, szAppName, _MAX_PATH, &nRead, NULL) ;
	CloseHandle (ThisFile) ;

	// Get path to program .bbc file and hide it:
	if (anyresources)
		strcpy (szFileName, szLoadDir) ;
	else
		strcpy (szFileName, szBinaries) ;
	strcat (szFileName, szAppName) ;
	strcat (szFileName, ".bbc") ;
	SetFileAttributes (szFileName, FILE_ATTRIBUTE_HIDDEN) ;

	// Enclose in quotes in case embedded space(s):
	strcpy (szEmptyFile, "\042") ;
	strcat (szEmptyFile, szFileName) ;
	strcat (szEmptyFile, "\042 ") ;
	strcat (szEmptyFile, szCmdLine) ;

	// Run BBCSDL:
	strcpy (szLibrary, szBinaries) ;
	strcat (szLibrary, "bbcsdl.exe") ;

	/// ShellExecute ((HWND) 0, "open", szLibrary, szEmptyFile, szLoadDir, ProgInfo.CmdShow) ;

	sei.cbSize = sizeof(sei) ;
        sei.fMask = SEE_MASK_NOCLOSEPROCESS ;
        sei.hwnd = NULL ;
	sei.lpVerb = "open" ;
        sei.lpFile = szLibrary ;
        sei.lpParameters = szEmptyFile ;
        sei.lpDirectory = szLoadDir ;
        sei.nShow = ProgInfo.CmdShow ;
        ShellExecuteEx (&sei) ;

	// Wait for process to finish:
        if (sei.hProcess)
	    {
		DWORD res ;
		do res = WaitForSingleObject (sei.hProcess, 1000) ;
		while (res == WAIT_TIMEOUT) ;
		CloseHandle (sei.hProcess) ;
	    }

	// Delete the binaries directory and all the files it contains:
	*(szBinaries + strlen(szBinaries) + 1) = '\0' ;
	shfo.hwnd = (HWND) 1 ; // Any non-zero value!
	shfo.pFrom = szBinaries ;
	shfo.wFunc = FO_DELETE ;
	shfo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR ;
	SHFileOperation (&shfo) ; 

	return 0 ;
    }


================================================
FILE: bin/win64/unpack64.nas
================================================
;/*****************************************************************\
;*	BBC BASIC for SDL 2.0 (Windows edition)			   *
;*	Copyright (c) R. T. Russell, 2024			   *
;*	aPLib courtesy of Joergen Ibsen, www.ibsensoftware.com	   *
;*								   *
;*	UNPACK.NAS Compressed file unpacker (64-bit version)	   *
;\*****************************************************************/
;
	GLOBAL  unpack,verify
	EXTERN  ReadFile,SetFilePointer
;
	SEGMENT .text
;
BUFSIZ  EQU	512
;
; Parameters: rcx = hFile
;	      rdx = lpBuffer
;	      r8  = nNumberOfBytesToVerify
;     Result: eax = non-zero if different
;  Preserved: rbx, rbp, rdi, rsi, r12, r13, r14, r15
;
verify:
	push	rbp
	push	rsi
	push	rdi
	mov	rbp,rsp		; copy stack pointer
	xchg	rcx,r8		; rcx = nBytes, r8 = hFile
	mov	rdi,rdx		; lpBuffer

	mov	edx,BUFSIZ
	neg	rdx
	and	rsp,rdx		; align stack pointer
	neg	edx
	sub	rsp,rdx		; make space on stack
	mov	rsi,rsp

vloop:	mov	eax,ecx
	cmp	eax,edx		; remaining >- BUFSIZ ?
	jbe	vloop1
	mov	eax,edx		; If so, use BUFSIZ
	
vloop1:	push	r8
	push	rax		; Bytes to read
	push	rcx		; Bytes remaining
	push	rdx		; BUFSIZ

	mov	rcx,r8		; hFile
	mov	rdx,rsi		; lpBuffer
	mov	r8,rax		; nNumberOfBytesToRead
	xor	r9d,r9d		; lpNumberOfBytesRead
	push	byte 0		; lpOverlapped

	sub	rsp,32		; Shadow space
	call	ReadFile
	add	rsp,40

	pop	rdx
	pop	rax		; rax = bytes remaining
	pop	rcx		; rcx = bytes just read
	pop	r8

	sub	eax,ecx		; Adjust bytes remaining
	jrcxz	vloop2
	push	rsi
	repz	cmpsb		; Compare file with memory
	pop	rsi

vloop2:	xchg	eax,ecx		; ecx <- remaining, eax <- result
	jnz	vloopx		; Different, so bailout
	or	ecx,ecx		; Anything remaining?
	jnz	vloop		; Continue comparing

vloopx:	mov	rsp,rbp		; Restore stack pointer
	pop	rdi
	pop	rsi
	pop	rbp
	ret
;
; Parameters: rcx = hFile
;	      rdx = lpBuffer
;	      r8 = nNumberOfBytesToRead
;	      r9 = lpNumberOfBytesRead
;	[rsp+40] = lpOverlapped
;  Preserved: rbx, rbp, rdi, rsi, r12, r13, r14, r15
;
unpack:
	and	qword [rsp+40],byte 1	; Test bit 0, zero remainder
	jz	near ReadFile	; n.b. lpOverlapped = NULL

	push	rbp
	mov	rbp,rsp		; copy stack pointer
	mov	r10,rcx		; hFile

	mov	eax,BUFSIZ
	neg	rax
	and	rsp,rax		; align stack pointer
	mov	rcx,rsp
	neg	rax
	sub	rsp,rax		; make space on stack

	push	rbx
	push	rsi
	push	rdi

	push	rdx

	mov	rsi,rcx
	mov	rdi,rdx

	cld
	mov	dl,80h
	xor	ebx,ebx

literal:
	call	getbyte
	stosb
	mov	bl,2
nexttag:
	call	getbit
	jnc	literal

	xor	ecx,ecx
	call	getbit
	jnc	codepair
	xor	eax,eax
	call	getbit
	jnc	shortmatch
	mov	bl,2
	inc	ecx
	mov	al,10h
getmorebits:
	call	getbit
	adc	al,al
	jnc	getmorebits
	jnz	domatch
	stosb
	jmp	short nexttag
;
codepair:
	call	getgamma_no_ecx
	sub	ecx,ebx
	jnz	normalcodepair
	call	getgamma
	jmp	short domatch_lastpos
;
shortmatch:
	call	getbyte
	shr	eax,1
	jz	donedepacking
	adc	ecx,ecx
	jmp	short domatch_with_2inc
;
normalcodepair:
	xchg	eax,ecx
	dec	eax
	shl	eax,8
	call	getbyte
	call	getgamma

	cmp	eax,32000
	jae	short domatch_with_2inc
	cmp	ah,5
	jae	short domatch_with_inc
	cmp	eax,7fh
	ja	short domatch_new_lastpos

domatch_with_2inc:
	inc	ecx

domatch_with_inc:
	inc	ecx

domatch_new_lastpos:
	xchg	eax,r8d
domatch_lastpos:
	mov	eax,r8d

	mov	bl,1

domatch:
	push	rsi
	mov	rsi,rdi
	sub	rsi,rax
	rep	movsb
	pop	rsi
	jmp	nexttag
;
getbit:
	add	dl,dl
	jnz	stillbitsleft
        xchg    al,dl
        pushf
        call    getbyte
        popf
        xchg    al,dl
	adc	dl,dl
stillbitsleft:
	ret
;
getgamma:
	xor	ecx,ecx
getgamma_no_ecx:
	inc	ecx
getgammaloop:
	call	getbit
	adc	ecx,ecx
	call	getbit
	jc	getgammaloop
	ret
;
donedepacking:
	pop	rdx
	sub	rdi,rdx

	xchg	rdi,[r9]	; [r9] = nRead, last block size = [r9]
	and	esi,BUFSIZ-1	; Get offset into buffer
	jz	noptradj
	sub	rsi,rdi		; How much to adjust pointer (negative)

	push	rcx
	push	rdx
	push	r8
	push	r9		; lpNumberOfBytesRead
	push	r10

	mov	rcx,r10		; hFile	
	mov	rdx,rsi		; DistanceToMove (negative)
	xor	r8d,r8d		; lpDistanceToMoveHigh
	mov	r9d,1		; dwMoveMethod = FILE_CURRENT

	sub	rsp,32		; Shadow space
        call    SetFilePointer
	add	rsp,32

	pop	r10
	pop	r9
	pop	r8
	pop	rdx
	pop	rcx

noptradj:
	pop	rdi
	pop	rsi
	pop	rbx

	mov	rsp,rbp
	pop	rbp
	ret
;
; In:  r10 = hFile (to refill buffer)
;      r9 = lpNumberOfBytesRead
;      rsi = buffer pointer (on stack)
; Out: [r9] = nRead (if buffer refilled)
;      al = byte read
;      
getbyte:
	test	rsi,BUFSIZ-1	; Buffer empty ?
	jnz	getbyt1

	push	rax
	push	rcx
	push	rdx
	push	r8
	push	r9		; lpNumberOfBytesRead
	push	r10

	mov	eax,BUFSIZ
	sub	rsi,rax

	mov	rcx,r10		; hFile
	mov	rdx,rsi		; lpBuffer
	mov	r8,rax		; nNumberOfBytesToRead
	push	byte 0		; lpOverlapped

	sub	rsp,32		; Shadow space
	call	ReadFile
	add	rsp,40

	pop	r10
	pop	r9
	pop	r8
	pop	rdx
	pop	rcx
	pop	rax
getbyt1:
	lodsb
	ret


================================================
FILE: console/linux/makefile
================================================
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -I ../../include -I ../../../BBCSDL/include

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_x86_64.nas
	nasm -f elf64 -s ../../../BBCSDL/src/bbdata_x86_64.nas -o bbdata.o

bbcbasic: $(OBJ)
	$(CXX) $(OBJ) -L . -L/usr/include -ldl -lm -lrt -pthread \
	-o bbcbasic -Wl,-s -Wl,-R,'$$ORIGIN'
	cp bbcbasic ../../


================================================
FILE: console/macm1/makefile
================================================
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -I ../../include -I ../../../BBCSDL/include

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_arm_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_arm_64.s
	as ../../../BBCSDL/src/bbdata_arm_64.s -o bbdata.o

bbcbasic: $(OBJ)
	$(CXX) $(OBJ) -F/Library/Frameworks -L . \
	-framework Foundation \
	-o bbcbasic -L/usr/include -ldl -lm
	cp bbcbasic ../../


================================================
FILE: console/macos/makefile
================================================
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -mmacosx-version-min=10.6 -I ../../include -I ../../../BBCSDL/include

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_x86_64.nas
	nasm --prefix _ -f macho64 -s ../../../BBCSDL/src/bbdata_x86_64.nas -o bbdata.o

bbcbasic: $(OBJ)
	$(CXX) $(OBJ) -F/Library/Frameworks -L . \
	-framework Foundation \
	-o bbcbasic -L/usr/include -ldl -lm
	cp bbcbasic ../../


================================================
FILE: console/raspi/makefile
================================================
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -I ../../include -I ../../../BBCSDL/include
CXXFLAGS = -march=armv7-a -mthumb -munaligned-access -mfloat-abi=hard -c

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic

bbmain.o: bbmain.c BBC.h
	$(CXX) -Wno-attributes $(CXXFLAGS) -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) $(CXXFLAGS) -DARMHF -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds $(CXXFLAGS) -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_arm_32.c BBC.h
	$(CXX) $(CXXFLAGS) -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result $(CXXFLAGS) -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result $(CXXFLAGS) -O2 $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_arm_32.s
	as ../../../BBCSDL/src/bbdata_arm_32.s -o bbdata.o

bbcbasic: $(OBJ)
	$(CXX) $(OBJ) -L . -L/usr/lib/ -ldl -lm -lrt -pthread \
	-o bbcbasic -Wl,-s -Wl,-R,'$$ORIGIN'
	cp bbcbasic ../../


================================================
FILE: console/rpi64/makefile
================================================
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -I ../../include -I ../../../BBCSDL/include

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic

bbmain.o: bbmain.c BBC.h
	$(CXX) -Wno-attributes -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_arm_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-result -c -O2 $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_arm_64.s
	sed 's/_\([a-z]*\)/\1/g' <../../../BBCSDL/src/bbdata_arm_64.s >bbdata.s
	as bbdata.s -o bbdata.o

bbcbasic: $(OBJ)
	$(CXX) $(OBJ) -L . -L/usr/lib/ -ldl -lm -lrt -pthread \
	-o bbcbasic -Wl,-s -Wl,-R,'$$ORIGIN'
	cp bbcbasic ../../


================================================
FILE: console/win64/makefile
================================================
# Update these paths as necessary to match your installation
VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include
CXX = gcc -Wall -I ../../include -I ../../../BBCSDL/include

OBJ = bbmain.o bbexec.o bbeval.o bbasmb.o bbdata.o bbccos.o bbccon.o

all: bbcbasic.exe

bbmain.o: bbmain.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbexec.o: bbexec.c BBC.h
	$(CXX) -c -O2 -freg-struct-return -ffast-math -fno-finite-math-only $< -o $@

bbeval.o: bbeval.c BBC.h
	$(CXX) -Wno-array-bounds -c -O2 -freg-struct-return -ffast-math -fmath-errno -fno-finite-math-only $< -o $@

bbasmb.o: bbasmb_x86_64.c BBC.h
	$(CXX) -c -Os $< -o $@

bbccos.o: bbccos.c bbccon.h
	$(CXX) -Wno-array-bounds -c -Os $< -o $@

bbccon.o: bbccon.c bbccon.h
	$(CXX) -Wno-array-bounds -Wno-unused-value -c -Os $< -o $@

bbdata.o: ../../../BBCSDL/src/bbdata_x86_64.nas
	nasm -f win64 -s ../../../BBCSDL/src/bbdata_x86_64.nas -o bbdata.o

bbcbasic.exe: $(OBJ)
	$(CXX) $(OBJ) \
	-o bbcbasic.exe -lmingw32 -lwinmm -Wl,-s -Wl,--export-all-symbols
	copy bbcbasic.exe ..\..\


================================================
FILE: examples/games/.Tables/CrnrSlic.ptb
================================================
xYwxxxh˼˼˼˘Wxwhyghixyx͛viwwxxxxihyyy͊hyyixvhxwxxwvhxhyʬ˼ʼʉzxʫhxxxyvhwwxyyy˻˺ʺʻixxxy˼˼˚yyʬ˼ʬʚʬʼʼ˼˼˼wXwhi˼˼˼ʬ˼ʼʺ˼˼˼gV'wvvufVfWT˫˺fF7guevVVfGT˼˼˼˩˼̼˼˩wV6vfvvgUwWcˬ˼ʬwU7wvvfgFwVT˺˻ˬWwfwwgXvvgVyyyͺ˼˼˼XvgvvvXg
Download .txt
gitextract_wqkzv1mv/

├── .gitattributes
├── .gitignore
├── README.md
├── bbcsdl.bbc
├── bin/
│   ├── android/
│   │   ├── Android.mk
│   │   ├── AndroidManifest.xml
│   │   ├── Application.mk
│   │   ├── BBCBasic.java
│   │   ├── autorun.bbc
│   │   ├── bbdata_x86_64.asm
│   │   ├── build.gradle
│   │   ├── help.bbc
│   │   ├── help.txt
│   │   └── styles.xml
│   ├── ios/
│   │   ├── autorun.bbc
│   │   ├── exported.txt
│   │   ├── help.bbc
│   │   └── help.txt
│   ├── linux/
│   │   ├── install32.txt
│   │   ├── install64.txt
│   │   ├── makefile
│   │   └── mkicon.sh
│   ├── macos/
│   │   └── makefile
│   ├── raspi/
│   │   ├── gpiodemo.bbc
│   │   ├── gpiotest.bbc
│   │   ├── install-rpi.txt
│   │   ├── makefile
│   │   └── mkicon.sh
│   ├── rpi64/
│   │   ├── gpiodemo.bbc
│   │   ├── gpiotest.bbc
│   │   ├── install-rpi.txt
│   │   └── makefile
│   ├── wasm/
│   │   ├── BBC.h
│   │   ├── autorun.bbc
│   │   ├── bbcsdl.h
│   │   ├── bbcsdl_shell.html
│   │   ├── makefile
│   │   └── readme.txt
│   ├── win32/
│   │   ├── makefile
│   │   ├── sdlrun.c
│   │   └── unpack32.nas
│   └── win64/
│       ├── makefile
│       ├── sdlrun.c
│       └── unpack64.nas
├── console/
│   ├── linux/
│   │   └── makefile
│   ├── macm1/
│   │   └── makefile
│   ├── macos/
│   │   └── makefile
│   ├── raspi/
│   │   └── makefile
│   ├── rpi64/
│   │   └── makefile
│   └── win64/
│       └── makefile
├── examples/
│   ├── about.bbc
│   ├── games/
│   │   ├── .Tables/
│   │   │   ├── Choice.mtb
│   │   │   ├── CrnrPerm.mtb
│   │   │   ├── CrnrSlic.ptb
│   │   │   ├── EdgePerm.mtb
│   │   │   ├── EdgeSlic.ptb
│   │   │   ├── Flip.mtb
│   │   │   ├── FlipChce.ptb
│   │   │   ├── SlicPerm.mtb
│   │   │   ├── Twist.mtb
│   │   │   ├── TwstChce.ptb
│   │   │   └── TwstFlip.ptb
│   │   ├── 2048.bbc
│   │   ├── Rubik.bbc
│   │   ├── animal.bbc
│   │   ├── buggy.bbc
│   │   ├── bugs.bbc
│   │   ├── cowboy.bbc
│   │   ├── dibley.bbc
│   │   ├── dibley.txt
│   │   ├── dropperz.bbc
│   │   ├── gorillas.bbc
│   │   ├── hangman.bbc
│   │   ├── hanoi.bbc
│   │   ├── jigsaw.bbc
│   │   ├── lemmings.bbc
│   │   ├── rheolism.bbc
│   │   ├── snake.bbc
│   │   ├── sudoku.bbc
│   │   ├── tower.bbc
│   │   └── triples.bbc
│   ├── general/
│   │   ├── BBSterm.bbc
│   │   ├── SkyBaby.bbc
│   │   ├── analyser.bbc
│   │   ├── banner.bbc
│   │   ├── banner.xml
│   │   ├── bbcbasic.txt
│   │   ├── bezierfit.bbc
│   │   ├── bigdem.bbc
│   │   ├── calculator.bbc
│   │   ├── calendar.bbc
│   │   ├── ceefax.bbc
│   │   ├── ceefax.car
│   │   ├── client.bbc
│   │   ├── conway.bbc
│   │   ├── dlgdemo.bbc
│   │   ├── ellipsefit.bbc
│   │   ├── example.csv
│   │   ├── filters.bbc
│   │   ├── kerning.bbc
│   │   ├── lanchat.bbc
│   │   ├── listdemo.bbc
│   │   ├── mode7dem.bbc
│   │   ├── mode7dem.car
│   │   ├── multidem.bbc
│   │   ├── multitouch.bbc
│   │   ├── mysqldem.bbc
│   │   ├── optics.bbc
│   │   ├── pdfdemo.bbc
│   │   ├── poem.bbc
│   │   ├── polyfit.bbc
│   │   ├── polyfit.csv
│   │   ├── prompter.bbc
│   │   ├── recorder.bbc
│   │   ├── scroll.bbc
│   │   ├── server.bbc
│   │   ├── server_multi.bbc
│   │   ├── sheet.bbc
│   │   ├── solve.bbc
│   │   ├── sortdemo.bbc
│   │   ├── sorttest.bbc
│   │   ├── telstar.bbc
│   │   ├── textedit.bbc
│   │   ├── timerdem.bbc
│   │   ├── unicode.bbc
│   │   ├── video.bbc
│   │   ├── weather.car
│   │   └── welcome.bbc
│   ├── graphics/
│   │   ├── Demo.ptr
│   │   ├── aagfxdem.bbc
│   │   ├── aliens.bbc
│   │   ├── anigif.bbc
│   │   ├── bbcowl.bbc
│   │   ├── bounce.bbc
│   │   ├── candle.bbc
│   │   ├── chain.bbc
│   │   ├── clock.bbc
│   │   ├── colorcycle.bbc
│   │   ├── disco.bbc
│   │   ├── doodle.bbc
│   │   ├── ellipses.bbc
│   │   ├── fern.bbc
│   │   ├── fire.bbc
│   │   ├── flier.bbc
│   │   ├── flood.bbc
│   │   ├── fluid.bbc
│   │   ├── illusion.bbc
│   │   ├── jclock.bbc
│   │   ├── kaleidoscope.bbc
│   │   ├── knots.bbc
│   │   ├── lighting.bbc
│   │   ├── mandel.bbc
│   │   ├── opengl.bbc
│   │   ├── pageturn.bbc
│   │   ├── penrose.bbc
│   │   ├── persian.bbc
│   │   ├── piechart.bbc
│   │   ├── pointer.bbc
│   │   ├── polydots.bbc
│   │   ├── polygon.bbc
│   │   ├── pyramid.bbc
│   │   ├── raytrace.bbc
│   │   ├── saucer.bbc
│   │   ├── scarab.bbc
│   │   ├── seascape.bbc
│   │   ├── sine.bbc
│   │   ├── sliderule.bbc
│   │   ├── slitscan.bbc
│   │   ├── smithchart.bbc
│   │   ├── snowscene.bbc
│   │   ├── soccerball.bbc
│   │   ├── spectrum.bbc
│   │   ├── spotlight.bbc
│   │   ├── squares.bbc
│   │   ├── surks.bbc
│   │   ├── swirl.bbc
│   │   ├── teapot.bbc
│   │   ├── teapot.fvf
│   │   ├── torus2d.bbc
│   │   ├── truchet.bbc
│   │   ├── vampire.bbc
│   │   ├── voronoi.bbc
│   │   ├── wheel.bbc
│   │   └── world.bbc
│   ├── immediate.bbc
│   ├── keywords.bbc
│   ├── keywords.txt
│   ├── physics/
│   │   ├── .pinball/
│   │   │   ├── ball.fvf
│   │   │   ├── flipper1.fvf
│   │   │   ├── flipper2.fvf
│   │   │   ├── pinball.fvf
│   │   │   └── plunger.fvf
│   │   ├── bbclock.bbc
│   │   ├── cradle.bbc
│   │   ├── cradle.fvf
│   │   ├── crates.bbc
│   │   ├── dangle.bbc
│   │   ├── dunebuggy.bbc
│   │   ├── girder.fvf
│   │   ├── lotto.bbc
│   │   ├── pinball.bbc
│   │   ├── pintograph.bbc
│   │   ├── plinth.fvf
│   │   ├── samples/
│   │   │   ├── Hello_Box2D.bbc
│   │   │   ├── SAMPLES.bbc
│   │   │   ├── breakable.bbc
│   │   │   ├── bridge.bbc
│   │   │   ├── bullet.bbc
│   │   │   ├── cantilever.bbc
│   │   │   ├── car.bbc
│   │   │   ├── chain.bbc
│   │   │   ├── confined.bbc
│   │   │   ├── crank.bbc
│   │   │   ├── dominos.bbc
│   │   │   ├── gears.bbc
│   │   │   ├── lotto.bbc
│   │   │   ├── pendulum1.bbc
│   │   │   ├── pendulum2.bbc
│   │   │   ├── pendulum3.bbc
│   │   │   ├── pendulum4.bbc
│   │   │   ├── pendulum5.bbc
│   │   │   ├── pendulum6.bbc
│   │   │   ├── platform.bbc
│   │   │   ├── pyramid.bbc
│   │   │   ├── radialgravity.bbc
│   │   │   ├── sensor.bbc
│   │   │   └── wobble.bbc
│   │   ├── spinmaze.bbc
│   │   └── trebuchet.bbc
│   ├── sounds/
│   │   ├── bauble.bbc
│   │   ├── bauble.fvf
│   │   ├── belier.bbc
│   │   ├── blacksmith.bbc
│   │   ├── brandenburg.bbc
│   │   ├── carolmedley.bbc
│   │   ├── carousel.bbc
│   │   ├── carousel.fvf
│   │   ├── crank.fvf
│   │   ├── dubois.bbc
│   │   ├── entertainer.bbc
│   │   ├── figleaf.bbc
│   │   ├── forge.fvf
│   │   ├── ground.fvf
│   │   ├── handle.fvf
│   │   ├── horses.fvf
│   │   ├── icerink.fvf
│   │   ├── lights1.fvf
│   │   ├── lights2.fvf
│   │   ├── metronome.bbc
│   │   ├── nut.fvf
│   │   ├── piano.bbc
│   │   ├── platform.fvf
│   │   ├── polly.bbc
│   │   ├── skater.fvf
│   │   ├── skaters.bbc
│   │   ├── skaters.tun
│   │   ├── soldier.fvf
│   │   ├── soldiers.bbc
│   │   ├── tocfugue.bbc
│   │   ├── tofair.bbc
│   │   ├── tofair.tun
│   │   ├── widor.bbc
│   │   └── xmascene.fvf
│   ├── starcmds.bbc
│   ├── starcmds.txt
│   ├── tools/
│   │   ├── BBCEdit/
│   │   │   ├── bgroupmod.bbc
│   │   │   ├── dlgmod.bbc
│   │   │   ├── filedlgmod.bbc
│   │   │   ├── menumod.bbc
│   │   │   └── msgmod.bbc
│   │   ├── BBCEdit.bbc
│   │   ├── SDLIDE.bbc
│   │   ├── addconst.bbc
│   │   ├── compiler.bbc
│   │   ├── crossref.bbc
│   │   ├── getri.bbc
│   │   ├── hello.bbc
│   │   ├── listvars.bbc
│   │   ├── macrorec.bbc
│   │   ├── memmon.bbc
│   │   ├── mmap.bbc
│   │   ├── profiler.bbc
│   │   ├── saa505x.bbc
│   │   ├── searchin.bbc
│   │   ├── settab.bbc
│   │   ├── sysvars.bbc
│   │   ├── timing.bbc
│   │   ├── touchide.bbc
│   │   └── versinfo.bbc
│   ├── vducodes.bbc
│   └── vducodes.txt
├── include/
│   ├── BBC.h
│   ├── SDL2_gfxPrimitives.h
│   ├── SDL2_gfxPrimitives_font.h
│   ├── SDL2_rotozoom.h
│   ├── SDL_net.h
│   ├── SDL_stbimage.h
│   ├── SDL_ttf.h
│   ├── bbccon.h
│   ├── bbcsdl.h
│   ├── begin_code.h
│   ├── close_code.h
│   ├── dr_mp3.h
│   ├── stb_image.h
│   ├── version.h
│   ├── zconf.h
│   └── zlib.h
├── lib/
│   ├── Bedstead-ext.otf
│   ├── Bedstead.otf
│   ├── Unifont.otf
│   ├── aagfxlib.bbc
│   ├── arraylib.bbc
│   ├── audiolib.bbc
│   ├── bigint.bbc
│   ├── box2ddbg.bbc
│   ├── box2dgfx.bbc
│   ├── box2dlib.bbc
│   ├── classlib.bbc
│   ├── datelib.bbc
│   ├── dlglib.bbc
│   ├── editbox.bbc
│   ├── ellipse.bbc
│   ├── eventlib.bbc
│   ├── filedlg.bbc
│   ├── fnusing.bbc
│   ├── gfxlib.bbc
│   ├── gleslib.bbc
│   ├── gpiolib.bbc
│   ├── imglib.bbc
│   ├── listlib.bbc
│   ├── memusage.bbc
│   ├── menulib.bbc
│   ├── mode7lib.bbc
│   ├── msgbox.bbc
│   ├── multiwin.bbc
│   ├── mysqllib.bbc
│   ├── nowait.bbc
│   ├── ogllib.bbc
│   ├── pdflib.bbc
│   ├── script.bbc
│   ├── sdldebug.bbc
│   ├── shaderlib.bbc
│   ├── socklib.bbc
│   ├── sortlib.bbc
│   ├── stringlib.bbc
│   ├── timerlib.bbc
│   ├── treeview.bbc
│   ├── utf8lib.bbc
│   ├── webgllib.bbc
│   └── xmllib.bbc
├── licence.txt
├── src/
│   ├── SDL2_gfxPrimitives.c
│   ├── SDL2_rotozoom.c
│   ├── b2Alias.cpp
│   ├── bbasmb_arm_32.c
│   ├── bbasmb_arm_64.c
│   ├── bbasmb_arm_v6m.c
│   ├── bbasmb_wasm32.c
│   ├── bbasmb_x86_32.TODO.c
│   ├── bbasmb_x86_64.c
│   ├── bbccli.c
│   ├── bbccon.c
│   ├── bbccos.c
│   ├── bbcmos.c
│   ├── bbcsdl.c
│   ├── bbctmp.m
│   ├── bbcvdu.c
│   ├── bbcvtx.c
│   ├── bbdata_arm_32.s
│   ├── bbdata_arm_64.s
│   ├── bbdata_wasm32.c
│   ├── bbdata_x86_32.nas
│   ├── bbdata_x86_64.nas
│   ├── bbeval.c
│   ├── bbexec.c
│   ├── bbmain.c
│   ├── flood.c
│   ├── sort.c
│   └── sound_sdl.c
└── tests/
    ├── ALLTESTS.bbc
    ├── arraytst.bbc
    ├── byreftst.bbc
    ├── convertst.bbc
    ├── errortst.bbc
    ├── exittest.bbc
    ├── filetest.bbc
    ├── fortest.bbc
    ├── int64tst.bbc
    ├── slicetest.bbc
    └── structst.bbc
Download .txt
SYMBOL INDEX (1488 symbols across 37 files)

FILE: bin/android/BBCBasic.java
  class BBCBasic (line 5) | public class BBCBasic extends SDLActivity
    method getLibraries (line 7) | protected String[] getLibraries() {
    method setOrientationBis (line 24) | public void setOrientationBis(int w, int h, boolean resizable, String ...

FILE: bin/wasm/BBC.h
  type heapptr (line 214) | typedef unsigned int heapptr ;
  type PARM (line 217) | typedef struct tagPARM
  type __attribute__ (line 254) | struct __attribute__ ((packed)) __attribute__
  type RND (line 260) | typedef struct tagRND
  type node (line 267) | struct node
  type node (line 272) | typedef struct node node ;
  type __attribute__ (line 376) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 377) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 378) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 379) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 380) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 381) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 382) | typedef __attribute__((aligned(1)))

FILE: bin/wasm/bbcsdl.h
  type heapptr (line 129) | typedef unsigned int heapptr ;
  type PARM (line 132) | typedef struct tagPARM
  type FCB (line 138) | typedef struct tagFCB
  type RND (line 146) | typedef struct tagRND

FILE: bin/win32/sdlrun.c
  type PROGINFO (line 28) | typedef struct tagPROGINFO {
  function WinMain (line 39) | int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

FILE: bin/win64/sdlrun.c
  type PROGINFO (line 28) | typedef struct tagPROGINFO {
  function WinMain (line 39) | int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

FILE: include/BBC.h
  type heapptr (line 219) | typedef unsigned int heapptr ;
  type PARM (line 222) | typedef struct tagPARM
  type __attribute__ (line 259) | struct __attribute__ ((packed)) __attribute__
  type RND (line 265) | typedef struct tagRND
  type node (line 272) | struct node
  type node (line 277) | typedef struct node node ;
  type __attribute__ (line 370) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 371) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 372) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 373) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 374) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 375) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 376) | typedef __attribute__((aligned(1)))
  function ILOAD (line 380) | static inline int ILOAD(void* p){ return (intptr_t)p&3 ? *((unaligned_in...
  function ISTORE (line 381) | static inline void ISTORE(void* p, int i){ if ((intptr_t)p&3) *((unalign...

FILE: include/SDL_net.h
  type Uint8 (line 30) | typedef uint8_t Uint8;
  type Uint16 (line 31) | typedef uint16_t Uint16;
  type Uint32 (line 32) | typedef uint32_t Uint32;
  type SDLNet_version (line 34) | typedef struct SDLNet_version {
  type SDL_version (line 46) | typedef SDL_version SDLNet_version;
  type IPaddress (line 90) | typedef struct {
  type _TCPsocket (line 131) | struct _TCPsocket
  type _UDPsocket (line 182) | struct _UDPsocket
  type UDPpacket (line 183) | typedef struct {
  type _SDLNet_SocketSet (line 298) | struct _SDLNet_SocketSet
  type _SDLNet_GenericSocket (line 301) | struct _SDLNet_GenericSocket {
  function SDL_FORCE_INLINE (line 313) | SDL_FORCE_INLINE int SDLNet_TCP_AddSocket(SDLNet_SocketSet set, TCPsocke...
  function SDL_FORCE_INLINE (line 317) | SDL_FORCE_INLINE int SDLNet_UDP_AddSocket(SDLNet_SocketSet set, UDPsocke...
  function SDL_FORCE_INLINE (line 325) | SDL_FORCE_INLINE int SDLNet_TCP_DelSocket(SDLNet_SocketSet set, TCPsocke...
  function SDL_FORCE_INLINE (line 329) | SDL_FORCE_INLINE int SDLNet_UDP_DelSocket(SDLNet_SocketSet set, UDPsocke...
  function SDL_FORCE_INLINE (line 348) | SDL_FORCE_INLINE int _SDLNet_SocketReady(SDLNet_GenericSocket sock)
  function SDL_FORCE_INLINE (line 385) | SDL_FORCE_INLINE void _SDLNet_Write16(Uint16 value, void *areap)
  function SDL_FORCE_INLINE (line 390) | SDL_FORCE_INLINE void _SDLNet_Write32(Uint32 value, void *areap)
  function SDL_FORCE_INLINE (line 395) | SDL_FORCE_INLINE Uint16 _SDLNet_Read16(const void *areap)
  function SDL_FORCE_INLINE (line 400) | SDL_FORCE_INLINE Uint32 _SDLNet_Read32(const void *areap)
  function SDL_FORCE_INLINE (line 407) | SDL_FORCE_INLINE void _SDLNet_Write16(Uint16 value, void *areap)
  function SDL_FORCE_INLINE (line 414) | SDL_FORCE_INLINE void _SDLNet_Write32(Uint32 value, void *areap)
  function SDL_FORCE_INLINE (line 423) | SDL_FORCE_INLINE Uint16 _SDLNet_Read16(void *areap)
  function SDL_FORCE_INLINE (line 429) | SDL_FORCE_INLINE Uint32 _SDLNet_Read32(const void *areap)

FILE: include/SDL_stbimage.h
  function yourFunction (line 61) | void yourFunction(const char* imageFilePath)
  type STBIMG_stbio_RWops (line 155) | typedef struct {
  type STBIMG__image (line 242) | typedef struct {
  function SDL_Surface (line 249) | static SDL_Surface* STBIMG__CreateSurfaceImpl(STBIMG__image img, int fre...
  function SDL_STBIMG_DEF (line 307) | SDL_STBIMG_DEF SDL_Surface* STBIMG_LoadFromMemory(const unsigned char* b...
  function STBIMG__io_read (line 357) | static int STBIMG__io_read(void* user, char* data, int size)
  function STBIMG__io_skip (line 371) | static void STBIMG__io_skip(void* user, int n)
  function STBIMG__io_eof (line 383) | static int STBIMG__io_eof(void* user)
  function SDL_STBIMG_DEF (line 390) | SDL_STBIMG_DEF SDL_bool STBIMG_stbi_callback_from_RW(SDL_RWops* src, STB...
  function SDL_STBIMG_DEF (line 417) | SDL_STBIMG_DEF SDL_Surface* STBIMG_Load_RW(SDL_RWops* src, int freesrc)
  function SDL_STBIMG_DEF (line 500) | SDL_STBIMG_DEF SDL_Surface* STBIMG_Load_RW_noSeek(SDL_RWops* src, int fr...
  function SDL_STBIMG_DEF (line 556) | SDL_STBIMG_DEF SDL_Surface* STBIMG_Load(const char* file)
  function SDL_STBIMG_DEF (line 564) | SDL_STBIMG_DEF SDL_Surface* STBIMG_CreateSurface(unsigned char* pixelDat...
  function SDL_Texture (line 593) | static SDL_Texture* STBIMG__SurfToTex(SDL_Renderer* renderer, SDL_Surfac...
  function SDL_STBIMG_DEF (line 608) | SDL_STBIMG_DEF SDL_Texture*
  function SDL_STBIMG_DEF (line 614) | SDL_STBIMG_DEF SDL_Texture*
  function SDL_STBIMG_DEF (line 620) | SDL_STBIMG_DEF SDL_Texture*
  function SDL_STBIMG_DEF (line 626) | SDL_STBIMG_DEF SDL_Texture*
  function SDL_STBIMG_DEF (line 634) | SDL_STBIMG_DEF SDL_Texture*

FILE: include/SDL_ttf.h
  type TTF_Font (line 77) | typedef struct _TTF_Font TTF_Font;

FILE: include/bbccon.h
  type heapptr (line 115) | typedef unsigned int heapptr ;
  type PARM (line 118) | typedef struct tagPARM
  type FCB (line 124) | typedef struct tagFCB
  type RND (line 132) | typedef struct tagRND

FILE: include/bbcsdl.h
  type heapptr (line 129) | typedef unsigned int heapptr ;
  type PARM (line 132) | typedef struct tagPARM
  type FCB (line 138) | typedef struct tagFCB
  type RND (line 146) | typedef struct tagRND

FILE: include/dr_mp3.h
  type drmp3_int8 (line 66) | typedef   signed char    drmp3_int8;
  type drmp3_uint8 (line 67) | typedef unsigned char    drmp3_uint8;
  type drmp3_int16 (line 68) | typedef   signed short   drmp3_int16;
  type drmp3_uint16 (line 69) | typedef unsigned short   drmp3_uint16;
  type drmp3_int32 (line 70) | typedef   signed int     drmp3_int32;
  type drmp3_uint32 (line 71) | typedef unsigned int     drmp3_uint32;
  type drmp3_int64 (line 72) | typedef   signed __int64 drmp3_int64;
  type drmp3_uint64 (line 73) | typedef unsigned __int64 drmp3_uint64;
  type drmp3_int8 (line 76) | typedef int8_t           drmp3_int8;
  type drmp3_uint8 (line 77) | typedef uint8_t          drmp3_uint8;
  type drmp3_int16 (line 78) | typedef int16_t          drmp3_int16;
  type drmp3_uint16 (line 79) | typedef uint16_t         drmp3_uint16;
  type drmp3_int32 (line 80) | typedef int32_t          drmp3_int32;
  type drmp3_uint32 (line 81) | typedef uint32_t         drmp3_uint32;
  type drmp3_int64 (line 82) | typedef int64_t          drmp3_int64;
  type drmp3_uint64 (line 83) | typedef uint64_t         drmp3_uint64;
  type drmp3_uint8 (line 85) | typedef drmp3_uint8      drmp3_bool8;
  type drmp3_uint32 (line 86) | typedef drmp3_uint32     drmp3_bool32;
  type drmp3dec_frame_info (line 96) | typedef struct
  type drmp3dec (line 101) | typedef struct
  type drmp3_src (line 123) | typedef struct drmp3_src drmp3_src;
  type drmp3_uint64 (line 124) | typedef drmp3_uint64 (* drmp3_src_read_proc)(drmp3_src* pSRC, drmp3_uint...
  type drmp3_src_algorithm (line 126) | typedef enum
  type drmp3_src_cache (line 133) | typedef struct
  type drmp3_src_config (line 141) | typedef struct
  type drmp3_src (line 150) | struct drmp3_src
  type drmp3_seek_origin (line 168) | typedef enum
  type drmp3_seek_point (line 174) | typedef struct
  type drmp3_bool32 (line 204) | typedef drmp3_bool32 (* drmp3_seek_proc)(void* pUserData, int offset, dr...
  type drmp3_config (line 206) | typedef struct
  type drmp3 (line 212) | typedef struct
  type __m128 (line 413) | typedef __m128 drmp3_f4;
  function drmp3_have_simd (line 441) | static int drmp3_have_simd(void)
  type float32x4_t (line 480) | typedef float32x4_t drmp3_f4;
  function drmp3_have_simd (line 481) | static int drmp3_have_simd(void)
  type drmp3_bs (line 498) | typedef struct
  type drmp3_L12_scale_info (line 504) | typedef struct
  type drmp3_L12_subband_alloc (line 510) | typedef struct
  type drmp3_L3_gr_info (line 515) | typedef struct
  type drmp3dec_scratch (line 524) | typedef struct
  function drmp3_bs_init (line 533) | static void drmp3_bs_init(drmp3_bs *bs, const drmp3_uint8 *data, int bytes)
  function drmp3_uint32 (line 540) | static drmp3_uint32 drmp3_bs_get_bits(drmp3_bs *bs, int n)
  function drmp3_hdr_valid (line 556) | static int drmp3_hdr_valid(const drmp3_uint8 *h)
  function drmp3_hdr_compare (line 565) | static int drmp3_hdr_compare(const drmp3_uint8 *h1, const drmp3_uint8 *h2)
  function drmp3_hdr_bitrate_kbps (line 573) | static unsigned drmp3_hdr_bitrate_kbps(const drmp3_uint8 *h)
  function drmp3_hdr_sample_rate_hz (line 582) | static unsigned drmp3_hdr_sample_rate_hz(const drmp3_uint8 *h)
  function drmp3_hdr_frame_samples (line 588) | static unsigned drmp3_hdr_frame_samples(const drmp3_uint8 *h)
  function drmp3_hdr_frame_bytes (line 593) | static int drmp3_hdr_frame_bytes(const drmp3_uint8 *h, int free_format_s...
  function drmp3_hdr_padding (line 603) | static int drmp3_hdr_padding(const drmp3_uint8 *h)
  function drmp3_L12_subband_alloc (line 609) | static const drmp3_L12_subband_alloc *drmp3_L12_subband_alloc_table(cons...
  function drmp3_L12_read_scalefactors (line 654) | static void drmp3_L12_read_scalefactors(drmp3_bs *bs, drmp3_uint8 *pba, ...
  function drmp3_L12_read_scale_info (line 678) | static void drmp3_L12_read_scale_info(const drmp3_uint8 *hdr, drmp3_bs *...
  function drmp3_L12_dequantize_granule (line 726) | static int drmp3_L12_dequantize_granule(float *grbuf, drmp3_bs *bs, drmp...
  function drmp3_L12_apply_scf_384 (line 761) | static void drmp3_L12_apply_scf_384(drmp3_L12_scale_info *sci, const flo...
  function drmp3_L3_read_side_info (line 776) | static int drmp3_L3_read_side_info(drmp3_bs *bs, drmp3_L3_gr_info *gr, c...
  function drmp3_L3_read_scalefactors (line 901) | static void drmp3_L3_read_scalefactors(drmp3_uint8 *scf, drmp3_uint8 *is...
  function drmp3_L3_ldexp_q2 (line 934) | static float drmp3_L3_ldexp_q2(float y, int exp_q2)
  function drmp3_L3_decode_scalefactors (line 946) | static void drmp3_L3_decode_scalefactors(const drmp3_uint8 *hdr, drmp3_u...
  function drmp3_L3_pow_43 (line 1013) | static float drmp3_L3_pow_43(int x)
  function drmp3_L3_huffman (line 1034) | static void drmp3_L3_huffman(float *dst, drmp3_bs *bs, const drmp3_L3_gr...
  function drmp3_L3_midside_stereo (line 1140) | static void drmp3_L3_midside_stereo(float *left, int n)
  function drmp3_L3_intensity_stereo_band (line 1162) | static void drmp3_L3_intensity_stereo_band(float *left, int n, float kl,...
  function drmp3_L3_stereo_top_band (line 1172) | static void drmp3_L3_stereo_top_band(const float *right, const drmp3_uin...
  function drmp3_L3_stereo_process (line 1192) | static void drmp3_L3_stereo_process(float *left, const drmp3_uint8 *ist_...
  function drmp3_L3_intensity_stereo (line 1226) | static void drmp3_L3_intensity_stereo(float *left, drmp3_uint8 *ist_pos,...
  function drmp3_L3_reorder (line 1246) | static void drmp3_L3_reorder(float *grbuf, float *scratch, const drmp3_u...
  function drmp3_L3_antialias (line 1263) | static void drmp3_L3_antialias(float *grbuf, int nbands)
  function drmp3_L3_dct3_9 (line 1298) | static void drmp3_L3_dct3_9(float *y)
  function drmp3_L3_imdct36 (line 1338) | static void drmp3_L3_imdct36(float *grbuf, float *overlap, const float *...
  function drmp3_L3_idct3 (line 1395) | static void drmp3_L3_idct3(float x0, float x1, float x2, float *dst)
  function drmp3_L3_imdct12 (line 1404) | static void drmp3_L3_imdct12(float *x, float *dst, float *overlap)
  function drmp3_L3_imdct_short (line 1424) | static void drmp3_L3_imdct_short(float *grbuf, float *overlap, int nbands)
  function drmp3_L3_change_sign (line 1437) | static void drmp3_L3_change_sign(float *grbuf)
  function drmp3_L3_imdct_gr (line 1445) | static void drmp3_L3_imdct_gr(float *grbuf, float *overlap, unsigned blo...
  function drmp3_L3_save_reservoir (line 1463) | static void drmp3_L3_save_reservoir(drmp3dec *h, drmp3dec_scratch *s)
  function drmp3_L3_restore_reservoir (line 1479) | static int drmp3_L3_restore_reservoir(drmp3dec *h, drmp3_bs *bs, drmp3de...
  function drmp3_L3_decode (line 1489) | static void drmp3_L3_decode(drmp3dec *h, drmp3dec_scratch *s, drmp3_L3_g...
  function drmp3d_DCT_II (line 1525) | static void drmp3d_DCT_II(float *grbuf, int n)
  type drmp3_int16 (line 1681) | typedef drmp3_int16 drmp3d_sample_t;
  function drmp3_int16 (line 1683) | static drmp3_int16 drmp3d_scale_pcm(float sample)
  type drmp3d_sample_t (line 1692) | typedef float drmp3d_sample_t;
  function drmp3d_scale_pcm (line 1694) | static float drmp3d_scale_pcm(float sample)
  function drmp3d_synth_pair (line 1700) | static void drmp3d_synth_pair(drmp3d_sample_t *pcm, int nch, const float...
  function drmp3d_synth (line 1725) | static void drmp3d_synth(float *xl, drmp3d_sample_t *dstl, int nch, floa...
  function drmp3d_synth_granule (line 1876) | static void drmp3d_synth_granule(float *qmf_state, float *grbuf, int nba...
  function drmp3d_match_frame (line 1904) | static int drmp3d_match_frame(const drmp3_uint8 *hdr, int mp3_bytes, int...
  function drmp3d_find_frame (line 1918) | static int drmp3d_find_frame(const drmp3_uint8 *mp3, int mp3_bytes, int ...
  function drmp3dec_init (line 1956) | void drmp3dec_init(drmp3dec *dec)
  function drmp3dec_decode_frame (line 1961) | int drmp3dec_decode_frame(drmp3dec *dec, const unsigned char *mp3, int m...
  function drmp3dec_f32_to_s16 (line 2055) | void drmp3dec_f32_to_s16(const float *in, drmp3_int16 *out, int num_samp...
  function drmp3_mix_f32 (line 2179) | static inline float drmp3_mix_f32(float x, float y, float a)
  function drmp3_blend_f32 (line 2184) | static void drmp3_blend_f32(float* pOut, float* pInA, float* pInB, float...
  function drmp3_src_cache_init (line 2192) | void drmp3_src_cache_init(drmp3_src* pSRC, drmp3_src_cache* pCache)
  function drmp3_uint64 (line 2202) | drmp3_uint64 drmp3_src_cache_read_frames(drmp3_src_cache* pCache, drmp3_...
  function drmp3_bool32 (line 2259) | drmp3_bool32 drmp3_src_init(const drmp3_src_config* pConfig, drmp3_src_r...
  function drmp3_bool32 (line 2279) | drmp3_bool32 drmp3_src_set_input_sample_rate(drmp3_src* pSRC, drmp3_uint...
  function drmp3_bool32 (line 2292) | drmp3_bool32 drmp3_src_set_output_sample_rate(drmp3_src* pSRC, drmp3_uin...
  function drmp3_uint64 (line 2305) | drmp3_uint64 drmp3_src_read_frames_ex(drmp3_src* pSRC, drmp3_uint64 fram...
  function drmp3_uint64 (line 2325) | drmp3_uint64 drmp3_src_read_frames(drmp3_src* pSRC, drmp3_uint64 frameCo...
  function drmp3_uint64 (line 2330) | drmp3_uint64 drmp3_src_read_frames_passthrough(drmp3_src* pSRC, drmp3_ui...
  function drmp3_uint64 (line 2340) | drmp3_uint64 drmp3_src_read_frames_linear(drmp3_src* pSRC, drmp3_uint64 ...
  function drmp3__on_read (line 2420) | static size_t drmp3__on_read(drmp3* pMP3, void* pBufferOut, size_t bytes...
  function drmp3_bool32 (line 2427) | static drmp3_bool32 drmp3__on_seek(drmp3* pMP3, int offset, drmp3_seek_o...
  function drmp3_bool32 (line 2444) | static drmp3_bool32 drmp3__on_seek_64(drmp3* pMP3, drmp3_uint64 offset, ...
  function drmp3_uint32 (line 2477) | static drmp3_uint32 drmp3_decode_next_frame_ex(drmp3* pMP3, drmp3d_sampl...
  function drmp3_uint32 (line 2563) | static drmp3_uint32 drmp3_decode_next_frame(drmp3* pMP3)
  function drmp3_uint32 (line 2570) | static drmp3_uint32 drmp3_seek_next_frame(drmp3* pMP3)
  function drmp3_uint64 (line 2588) | static drmp3_uint64 drmp3_read_src(drmp3_src* pSRC, drmp3_uint64 frameCo...
  function drmp3_bool32 (line 2672) | drmp3_bool32 drmp3_init_internal(drmp3* pMP3, drmp3_read_proc onRead, dr...
  function drmp3_bool32 (line 2728) | drmp3_bool32 drmp3_init(drmp3* pMP3, drmp3_read_proc onRead, drmp3_seek_...
  function drmp3__on_read_memory (line 2739) | static size_t drmp3__on_read_memory(void* pUserData, void* pBufferOut, s...
  function drmp3_bool32 (line 2758) | static drmp3_bool32 drmp3__on_seek_memory(void* pUserData, int byteOffse...
  function drmp3_bool32 (line 2787) | drmp3_bool32 drmp3_init_memory(drmp3* pMP3, const void* pData, size_t da...
  function drmp3__on_read_stdio (line 2810) | static size_t drmp3__on_read_stdio(void* pUserData, void* pBufferOut, si...
  function drmp3_bool32 (line 2815) | static drmp3_bool32 drmp3__on_seek_stdio(void* pUserData, int offset, dr...
  function drmp3_bool32 (line 2820) | drmp3_bool32 drmp3_init_file(drmp3* pMP3, const char* filePath, const dr...
  function drmp3_uninit (line 2846) | void drmp3_uninit(drmp3* pMP3)
  function drmp3_uint64 (line 2861) | drmp3_uint64 drmp3_read_pcm_frames_f32(drmp3* pMP3, drmp3_uint64 framesT...
  function drmp3_reset (line 2893) | void drmp3_reset(drmp3* pMP3)
  function drmp3_bool32 (line 2915) | drmp3_bool32 drmp3_seek_to_start_of_stream(drmp3* pMP3)
  function drmp3_get_cached_pcm_frame_count_from_src (line 2930) | float drmp3_get_cached_pcm_frame_count_from_src(drmp3* pMP3)
  function drmp3_get_pcm_frames_remaining_in_mp3_frame (line 2935) | float drmp3_get_pcm_frames_remaining_in_mp3_frame(drmp3* pMP3)
  function drmp3_bool32 (line 2952) | drmp3_bool32 drmp3_seek_forward_by_pcm_frames__brute_force(drmp3* pMP3, ...
  function drmp3_bool32 (line 2996) | drmp3_bool32 drmp3_seek_to_pcm_frame__brute_force(drmp3* pMP3, drmp3_uin...
  function drmp3_bool32 (line 3018) | drmp3_bool32 drmp3_find_closest_seek_point(drmp3* pMP3, drmp3_uint64 fra...
  function drmp3_bool32 (line 3039) | drmp3_bool32 drmp3_seek_to_pcm_frame__seek_table(drmp3* pMP3, drmp3_uint...
  function drmp3_bool32 (line 3100) | drmp3_bool32 drmp3_seek_to_pcm_frame(drmp3* pMP3, drmp3_uint64 frameIndex)
  function drmp3_bool32 (line 3118) | drmp3_bool32 drmp3_get_mp3_and_pcm_frame_count(drmp3* pMP3, drmp3_uint64...
  function drmp3_uint64 (line 3178) | drmp3_uint64 drmp3_get_pcm_frame_count(drmp3* pMP3)
  function drmp3_uint64 (line 3188) | drmp3_uint64 drmp3_get_mp3_frame_count(drmp3* pMP3)
  function drmp3__accumulate_running_pcm_frame_count (line 3198) | void drmp3__accumulate_running_pcm_frame_count(drmp3* pMP3, drmp3_uint32...
  type drmp3__seeking_mp3_frame_info (line 3209) | typedef struct
  function drmp3_bool32 (line 3215) | drmp3_bool32 drmp3_calculate_seek_points(drmp3* pMP3, drmp3_uint32* pSee...
  function drmp3_bool32 (line 3336) | drmp3_bool32 drmp3_bind_seek_table(drmp3* pMP3, drmp3_uint32 seekPointCo...
  function drmp3_free (line 3445) | void drmp3_free(void* p)

FILE: include/stb_image.h
  type stbi_uc (line 384) | typedef unsigned char stbi_uc;
  type stbi_us (line 385) | typedef unsigned short stbi_us;
  type stbi_io_callbacks (line 408) | typedef struct
  type stbi__uint16 (line 639) | typedef unsigned short stbi__uint16;
  type stbi__int16 (line 640) | typedef   signed short stbi__int16;
  type stbi__uint32 (line 641) | typedef unsigned int   stbi__uint32;
  type stbi__int32 (line 642) | typedef   signed int   stbi__int32;
  type stbi__uint16 (line 645) | typedef uint16_t stbi__uint16;
  type stbi__int16 (line 646) | typedef int16_t  stbi__int16;
  type stbi__uint32 (line 647) | typedef uint32_t stbi__uint32;
  type stbi__int32 (line 648) | typedef int32_t  stbi__int32;
  function stbi__cpuid3 (line 729) | static int stbi__cpuid3(void)
  function stbi__sse2_available (line 751) | static int stbi__sse2_available(void)
  function stbi__sse2_available (line 762) | static int stbi__sse2_available(void)
  type stbi__context (line 802) | typedef struct
  function stbi__start_mem (line 823) | static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int...
  function stbi__start_callbacks (line 833) | static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c...
  function stbi__stdio_read (line 847) | static int stbi__stdio_read(void *user, char *data, int size)
  function stbi__stdio_skip (line 852) | static void stbi__stdio_skip(void *user, int n)
  function stbi__stdio_eof (line 862) | static int stbi__stdio_eof(void *user)
  function stbi__start_file (line 874) | static void stbi__start_file(stbi__context *s, FILE *f)
  function stbi__rewind (line 883) | static void stbi__rewind(stbi__context *s)
  type stbi__result_info (line 898) | typedef struct
  function STBIDEF (line 969) | STBIDEF const char *stbi_failure_reason(void)
  function stbi__err (line 975) | static int stbi__err(const char *str)
  function stbi__addsizes_valid (line 999) | static int stbi__addsizes_valid(int a, int b)
  function stbi__mul2sizes_valid (line 1011) | static int stbi__mul2sizes_valid(int a, int b)
  function stbi__mad2sizes_valid (line 1021) | static int stbi__mad2sizes_valid(int a, int b, int add)
  function stbi__mad3sizes_valid (line 1028) | static int stbi__mad3sizes_valid(int a, int b, int c, int add)
  function stbi__mad4sizes_valid (line 1036) | static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add)
  function stbi_image_free (line 1081) | __attribute__ ((visibility ("default"))) void stbi_image_free(void *retv...
  function stbi_set_flip_vertically_on_load (line 1096) | __attribute__ ((visibility ("default"))) void stbi_set_flip_vertically_o...
  function STBIDEF (line 1106) | STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_sh...
  function stbi_uc (line 1170) | static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, ...
  function stbi__uint16 (line 1186) | static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, ...
  function stbi__vertical_flip (line 1202) | static void stbi__vertical_flip(void *image, int w, int h, int bytes_per...
  function stbi__vertical_flip_slices (line 1227) | static void stbi__vertical_flip_slices(void *image, int w, int h, int z,...
  function stbi__uint16 (line 1266) | static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, ...
  function stbi__float_postprocess (line 1294) | static void stbi__float_postprocess(float *result, int *x, int *y, int *...
  function STBIDEF (line 1311) | STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, c...
  function FILE (line 1317) | static FILE *stbi__fopen(char const *filename, char const *mode)
  function STBIDEF (line 1346) | STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *co...
  function STBIDEF (line 1356) | STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp,...
  function STBIDEF (line 1369) | STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, in...
  function STBIDEF (line 1382) | STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int ...
  function STBIDEF (line 1395) | STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len...
  function STBIDEF (line 1402) | STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *cl...
  function STBIDEF (line 1409) | STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, i...
  function STBIDEF (line 1416) | STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk,...
  function stbi_uc (line 1424) | __attribute__ ((visibility ("default"))) stbi_uc *stbi_load_gif_from_mem...
  function STBIDEF (line 1458) | STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, in...
  function STBIDEF (line 1465) | STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, ...
  function STBIDEF (line 1473) | STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *com...
  function STBIDEF (line 1483) | STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, ...
  function STBIDEF (line 1497) | STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len)
  function STBIDEF (line 1511) | STBIDEF int      stbi_is_hdr          (char const *filename)
  function STBIDEF (line 1522) | STBIDEF int stbi_is_hdr_from_file(FILE *f)
  function STBIDEF (line 1539) | STBIDEF int      stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clb...
  function STBIDEF (line 1555) | STBIDEF void   stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = ga...
  function STBIDEF (line 1556) | STBIDEF void   stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = sc...
  function STBIDEF (line 1561) | STBIDEF void   stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = ...
  function STBIDEF (line 1562) | STBIDEF void   stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = ...
  function stbi__refill_buffer (line 1577) | static void stbi__refill_buffer(stbi__context *s)
  function stbi_inline (line 1594) | stbi_inline static stbi_uc stbi__get8(stbi__context *s)
  function stbi_inline (line 1608) | stbi_inline static int stbi__at_eof(stbi__context *s)
  function stbi__skip (line 1624) | static void stbi__skip(stbi__context *s, int n)
  function stbi__getn (line 1646) | static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n)
  function stbi__get16be (line 1674) | static int stbi__get16be(stbi__context *s)
  function stbi__uint32 (line 1684) | static stbi__uint32 stbi__get32be(stbi__context *s)
  function stbi__get16le (line 1694) | static int stbi__get16le(stbi__context *s)
  function stbi__uint32 (line 1702) | static stbi__uint32 stbi__get32le(stbi__context *s)
  function stbi_uc (line 1726) | static stbi_uc stbi__compute_y(int r, int g, int b)
  function stbi__uint16 (line 1783) | static stbi__uint16 stbi__compute_y_16(int r, int g, int b)
  function stbi__uint16 (line 1792) | static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_...
  function stbi_uc (line 1864) | static stbi_uc *stbi__hdr_to_ldr(float   *data, int x, int y, int comp)
  type stbi__huffman (line 1918) | typedef struct
  type stbi__jpeg (line 1929) | typedef struct
  function stbi__build_huffman (line 1983) | static int stbi__build_huffman(stbi__huffman *h, int *count)
  function stbi__build_fast_ac (line 2027) | static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h)
  function stbi__grow_buffer_unsafe (line 2052) | static void stbi__grow_buffer_unsafe(stbi__jpeg *j)
  function stbi_inline (line 2074) | stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffm...
  function stbi_inline (line 2128) | stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n)
  function stbi_inline (line 2143) | stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n)
  function stbi_inline (line 2154) | stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j)
  function stbi__jpeg_decode_block (line 2182) | static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__...
  function stbi__jpeg_decode_block_prog_dc (line 2234) | static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64]...
  function stbi__jpeg_decode_block_prog_ac (line 2262) | static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64]...
  function stbi_inline (line 2382) | stbi_inline static stbi_uc stbi__clamp(int x)
  function stbi__idct_block (line 2433) | static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64])
  function stbi__idct_simd (line 2496) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
  function stbi__idct_simd (line 2677) | static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
  function stbi_uc (line 2885) | static stbi_uc stbi__get_marker(stbi__jpeg *j)
  function stbi__jpeg_reset (line 2902) | static void stbi__jpeg_reset(stbi__jpeg *j)
  function stbi__parse_entropy_coded_data (line 2915) | static int stbi__parse_entropy_coded_data(stbi__jpeg *z)
  function stbi__jpeg_dequantize (line 3039) | static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant)
  function stbi__jpeg_finish (line 3046) | static void stbi__jpeg_finish(stbi__jpeg *z)
  function stbi__process_marker (line 3065) | static int stbi__process_marker(stbi__jpeg *z, int m)
  function stbi__process_scan_header (line 3168) | static int stbi__process_scan_header(stbi__jpeg *z)
  function stbi__free_jpeg_components (line 3207) | static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why)
  function stbi__process_frame_header (line 3229) | static int stbi__process_frame_header(stbi__jpeg *z, int scan)
  function stbi__decode_jpeg_header (line 3330) | static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan)
  function stbi__decode_jpeg_image (line 3355) | static int stbi__decode_jpeg_image(stbi__jpeg *j)
  type stbi_uc (line 3397) | typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_u...
  function stbi_uc (line 3402) | static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *...
  function stbi_uc (line 3411) | static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, s...
  function stbi_uc (line 3421) | static stbi_uc*  stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, ...
  function stbi_uc (line 3451) | static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, ...
  function stbi_uc (line 3476) | static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_n...
  function stbi_uc (line 3592) | static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_nea...
  function stbi__YCbCr_to_RGB_row (line 3606) | static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const...
  function stbi__YCbCr_to_RGB_simd (line 3632) | static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi...
  function stbi__setup_jpeg (line 3767) | static void stbi__setup_jpeg(stbi__jpeg *j)
  function stbi__cleanup_jpeg (line 3789) | static void stbi__cleanup_jpeg(stbi__jpeg *j)
  type stbi__resample (line 3794) | typedef struct
  function stbi_uc (line 3805) | static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y)
  function stbi_uc (line 3811) | static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, i...
  function stbi__jpeg_test (line 3987) | static int stbi__jpeg_test(stbi__context *s)
  function stbi__jpeg_info_raw (line 4000) | static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp)
  function stbi__jpeg_info (line 4012) | static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp)
  type stbi__zhuffman (line 4040) | typedef struct
  function stbi_inline (line 4050) | stbi_inline static int stbi__bitreverse16(int n)
  function stbi_inline (line 4059) | stbi_inline static int stbi__bit_reverse(int v, int bits)
  function stbi__zbuild_huffman (line 4067) | static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizeli...
  type stbi__zbuf (line 4120) | typedef struct
  function stbi_inline (line 4134) | stbi_inline static int stbi__zeof(stbi__zbuf *z)
  function stbi_inline (line 4139) | stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z)
  function stbi__fill_bits (line 4144) | static void stbi__fill_bits(stbi__zbuf *z)
  function stbi__zreceive (line 4156) | int stbi__zreceive(stbi__zbuf *z, int n)
  function stbi__zhuffman_decode_slowpath (line 4166) | static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z)
  function stbi_inline (line 4185) | stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffm...
  function stbi__zexpand (line 4204) | static int stbi__zexpand(stbi__zbuf *z, char *zout, int n)  // need to m...
  function stbi__parse_huffman_block (line 4240) | static int stbi__parse_huffman_block(stbi__zbuf *a)
  function stbi__compute_huffman_codes (line 4282) | static int stbi__compute_huffman_codes(stbi__zbuf *a)
  function stbi__parse_uncompressed_block (line 4332) | static int stbi__parse_uncompressed_block(stbi__zbuf *a)
  function stbi__parse_zlib_header (line 4361) | static int stbi__parse_zlib_header(stbi__zbuf *a)
  function stbi__parse_zlib (line 4404) | static int stbi__parse_zlib(stbi__zbuf *a, int parse_header)
  function stbi__do_zlib (line 4432) | static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, i...
  function STBIDEF (line 4442) | STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int ...
  function STBIDEF (line 4458) | STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *...
  function STBIDEF (line 4463) | STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *b...
  function STBIDEF (line 4479) | STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const ...
  function STBIDEF (line 4490) | STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int l...
  function STBIDEF (line 4506) | STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, co...
  type stbi__pngchunk (line 4529) | typedef struct
  function stbi__pngchunk (line 4535) | static stbi__pngchunk stbi__get_chunk_header(stbi__context *s)
  function stbi__check_png_header (line 4543) | static int stbi__check_png_header(stbi__context *s)
  type stbi__png (line 4552) | typedef struct
  function stbi__paeth (line 4580) | static int stbi__paeth(int a, int b, int c)
  function stbi__create_png_image_raw (line 4594) | static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__...
  function stbi__create_png_image (line 4806) | static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stb...
  function stbi__compute_transparency (line 4851) | static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int o...
  function stbi__compute_transparency16 (line 4876) | static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3]...
  function stbi__expand_png_palette (line 4901) | static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int ...
  function STBIDEF (line 4941) | STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpr...
  function STBIDEF (line 4946) | STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_conv...
  function STBIDEF (line 4958) | STBIDEF void stbi__unpremultiply_on_load_thread(int flag_true_if_should_...
  function STBIDEF (line 4964) | STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_shou...
  function stbi__de_iphone (line 4978) | static void stbi__de_iphone(stbi__png *z)
  function stbi__parse_png_file (line 5023) | static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
  function stbi__png_test (line 5238) | static int stbi__png_test(stbi__context *s)
  function stbi__png_info_raw (line 5246) | static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp)
  function stbi__png_info (line 5258) | static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__png_is16 (line 5265) | static int stbi__png_is16(stbi__context *s)
  function stbi__bmp_test_raw (line 5282) | static int stbi__bmp_test_raw(stbi__context *s)
  function stbi__bmp_test (line 5297) | static int stbi__bmp_test(stbi__context *s)
  function stbi__high_bit (line 5306) | static int stbi__high_bit(unsigned int z)
  function stbi__bitcount (line 5318) | static int stbi__bitcount(unsigned int a)
  function stbi__shiftsigned (line 5331) | static int stbi__shiftsigned(unsigned int v, int shift, int bits)
  type stbi__bmp_data (line 5351) | typedef struct
  function stbi__bmp_set_mask_defaults (line 5358) | static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress)
  function stbi__tga_get_comp (line 5661) | static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_r...
  function stbi__tga_info (line 5677) | static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__tga_test (line 5742) | static int stbi__tga_test(stbi__context *s)
  function stbi__tga_read_rgb16 (line 5774) | static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out)
  function stbi__psd_test (line 6003) | static int stbi__psd_test(stbi__context *s)
  function stbi__psd_decode_rle (line 6010) | static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelC...
  function stbi__pic_is4 (line 6258) | static int stbi__pic_is4(stbi__context *s,const char *str)
  function stbi__pic_test_core (line 6268) | static int stbi__pic_test_core(stbi__context *s)
  type stbi__pic_packet (line 6284) | typedef struct
  function stbi_uc (line 6289) | static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest)
  function stbi__copyval (line 6303) | static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src)
  function stbi_uc (line 6312) | static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int heigh...
  function stbi__pic_test (line 6463) | static int stbi__pic_test(stbi__context *s)
  type stbi__gif_lzw (line 6475) | typedef struct
  type stbi__gif (line 6482) | typedef struct
  function stbi__gif_test_raw (line 6502) | static int stbi__gif_test_raw(stbi__context *s)
  function stbi__gif_test (line 6512) | static int stbi__gif_test(stbi__context *s)
  function stbi__gif_parse_colortable (line 6519) | static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256...
  function stbi__gif_header (line 6530) | static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, i...
  function stbi__gif_info_raw (line 6561) | static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp)
  function stbi__out_gif_code (line 6576) | static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code)
  function stbi_uc (line 6613) | static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g)
  function stbi_uc (line 6700) | static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int ...
  function stbi__gif_info (line 6999) | static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__hdr_test_core (line 7009) | static int stbi__hdr_test_core(stbi__context *s, const char *signature)
  function stbi__hdr_test (line 7019) | static int stbi__hdr_test(stbi__context* s)
  function stbi__hdr_convert (line 7053) | static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp)
  function stbi__hdr_info (line 7211) | static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__bmp_info (line 7257) | static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__psd_info (line 7281) | static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__psd_is16 (line 7316) | static int stbi__psd_is16(stbi__context *s)
  function stbi__pic_info (line 7345) | static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__pnm_test (line 7416) | static int      stbi__pnm_test(stbi__context *s)
  function stbi__pnm_isspace (line 7458) | static int      stbi__pnm_isspace(char c)
  function stbi__pnm_skip_whitespace (line 7463) | static void     stbi__pnm_skip_whitespace(stbi__context *s, char *c)
  function stbi__pnm_isdigit (line 7477) | static int      stbi__pnm_isdigit(char c)
  function stbi__pnm_getinteger (line 7482) | static int      stbi__pnm_getinteger(stbi__context *s, char *c)
  function stbi__pnm_info (line 7494) | static int      stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp)
  function stbi__pnm_is16 (line 7533) | static int stbi__pnm_is16(stbi__context *s)
  function stbi__info_main (line 7541) | static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp)
  function stbi__is_16_main (line 7583) | static int stbi__is_16_main(stbi__context *s)
  function STBIDEF (line 7600) | STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp)
  function STBIDEF (line 7610) | STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp)
  function STBIDEF (line 7621) | STBIDEF int stbi_is_16_bit(char const *filename)
  function STBIDEF (line 7631) | STBIDEF int stbi_is_16_bit_from_file(FILE *f)
  function STBIDEF (line 7643) | STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x...
  function STBIDEF (line 7650) | STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *u...
  function STBIDEF (line 7657) | STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len)
  function STBIDEF (line 7664) | STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, vo...

FILE: include/zconf.h
  type z_size_t (line 241) | typedef unsigned long z_size_t;
  type z_size_t (line 245) | typedef unsigned NO_SIZE_T z_size_t;
  type z_size_t (line 248) | typedef size_t z_size_t;
  type z_size_t (line 250) | typedef unsigned long z_size_t;
  type Byte (line 391) | typedef unsigned char  Byte;
  type uInt (line 393) | typedef unsigned int   uInt;
  type uLong (line 394) | typedef unsigned long  uLong;
  type Byte (line 400) | typedef Byte  FAR Bytef;
  type charf (line 402) | typedef char  FAR charf;
  type intf (line 403) | typedef int   FAR intf;
  type uInt (line 404) | typedef uInt  FAR uIntf;
  type uLong (line 405) | typedef uLong FAR uLongf;
  type Byte (line 412) | typedef Byte const *voidpc;
  type Byte (line 413) | typedef Byte FAR   *voidpf;
  type Byte (line 414) | typedef Byte       *voidp;
  type Z_U4 (line 429) | typedef Z_U4 z_crc_t;
  type z_crc_t (line 431) | typedef unsigned long z_crc_t;

FILE: include/zlib.h
  type voidpf (line 81) | typedef voidpf (*alloc_func)
  type internal_state (line 84) | struct internal_state
  type z_stream (line 86) | typedef struct z_stream_s {
  type z_stream (line 108) | typedef z_stream FAR *z_streamp;
  type gz_header (line 114) | typedef struct gz_header_s {
  type gz_header (line 131) | typedef gz_header FAR *gz_headerp;
  type gzFile_s (line 1300) | struct gzFile_s
  type gzFile_s (line 1817) | struct gzFile_s {

FILE: src/SDL2_gfxPrimitives.c
  type SDL2_gfxBresenhamIterator (line 46) | typedef struct {
  function pixel (line 63) | int pixel(SDL_Renderer *renderer, Sint16 x, Sint16 y)
  function pixelColor (line 78) | int pixelColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Uint32 color)
  function pixelRGBA (line 97) | int pixelRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Uint8 r, Uint...
  function pixelRGBAWeight (line 120) | int pixelRGBAWeight(SDL_Renderer * renderer, Sint16 x, Sint16 y, Uint8 r...
  function hline (line 148) | int hline(SDL_Renderer * renderer, Sint16 x1, Sint16 x2, Sint16 y)
  function hlineColor (line 165) | int hlineColor(SDL_Renderer * renderer, Sint16 x1, Sint16 x2, Sint16 y, ...
  function hlineRGBA (line 185) | int hlineRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 x2, Sint16 y, U...
  function vline (line 206) | int vline(SDL_Renderer * renderer, Sint16 x, Sint16 y1, Sint16 y2)
  function vlineColor (line 222) | int vlineColor(SDL_Renderer * renderer, Sint16 x, Sint16 y1, Sint16 y2, ...
  function vlineRGBA (line 242) | int vlineRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y1, Sint16 y2, U...
  function rectangleColor (line 265) | int rectangleColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16...
  function rectangleRGBA (line 286) | int rectangleRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 ...
  function roundedRectangleColor (line 358) | int roundedRectangleColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1,...
  function roundedRectangleRGBA (line 380) | int roundedRectangleRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, ...
  function roundedBoxColor (line 503) | int roundedBoxColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint1...
  function roundedBoxRGBA (line 525) | int roundedBoxRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16...
  function boxColor (line 700) | int boxColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, S...
  function boxRGBA (line 721) | int boxRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, Si...
  function line (line 791) | int line(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, Sint1...
  function lineColor (line 811) | int lineColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, ...
  function lineRGBA (line 832) | int lineRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, S...
  function _aalineRGBA (line 872) | int _aalineRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2...
  function aalineColor (line 1081) | int aalineColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2...
  function aalineRGBA (line 1102) | int aalineRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2,...
  function circleColor (line 1120) | int circleColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad,...
  function circleRGBA (line 1140) | int circleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, ...
  function arcColor (line 1160) | int arcColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, Si...
  function arcRGBA (line 1183) | int arcRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, Sin...
  function aacircleColor (line 1418) | int aacircleColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 ra...
  function aacircleRGBA (line 1438) | int aacircleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad...
  function filledCircleColor (line 1459) | int filledCircleColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint1...
  function filledCircleRGBA (line 1479) | int filledCircleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16...
  function ellipseColor (line 1498) | int ellipseColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rx,...
  function ellipseRGBA (line 1519) | int ellipseRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rx, ...
  function lrint (line 1667) | static __inline long
  function lrint (line 1688) | __declspec(naked) long int
  function aaellipseColor (line 1714) | int aaellipseColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 r...
  function aaellipseRGBA (line 1735) | int aaellipseRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rx...
  function filledEllipseColor (line 1930) | int filledEllipseColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint...
  function filledEllipseRGBA (line 1951) | int filledEllipseRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint1...
  function _pieRGBA (line 2098) | int _pieRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad, Si...
  function pieColor (line 2213) | int pieColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad,
  function pieRGBA (line 2236) | int pieRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad,
  function filledPieColor (line 2255) | int filledPieColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 r...
  function filledPieRGBA (line 2277) | int filledPieRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 rad,
  function trigonColor (line 2301) | int trigonColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2...
  function trigonRGBA (line 2333) | int trigonRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2,...
  function aatrigonColor (line 2367) | int aatrigonColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 ...
  function aatrigonRGBA (line 2399) | int aatrigonRGBA(SDL_Renderer * renderer,  Sint16 x1, Sint16 y1, Sint16 ...
  function filledTrigonColor (line 2433) | int filledTrigonColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sin...
  function filledTrigonRGBA (line 2467) | int filledTrigonRGBA(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint...
  function polygonColor (line 2496) | int polygonColor(SDL_Renderer * renderer, const Sint16 * vx, const Sint1...
  function polygon (line 2512) | int polygon(SDL_Renderer * renderer, const Sint16 * vx, const Sint16 * v...
  function polygonRGBA (line 2578) | int polygonRGBA(SDL_Renderer * renderer, const Sint16 * vx, const Sint16...
  function aapolygonColor (line 2630) | int aapolygonColor(SDL_Renderer * renderer, const Sint16 * vx, const Sin...
  function aapolygonRGBA (line 2650) | int aapolygonRGBA(SDL_Renderer * renderer, const Sint16 * vx, const Sint...
  function _gfxPrimitivesCompareInt (line 2708) | int _gfxPrimitivesCompareInt(const void *a, const void *b)
  function filledPolygonRGBAMT (line 2745) | int filledPolygonRGBAMT(SDL_Renderer * renderer, const Sint16 * vx, cons...
  function filledPolygonColor (line 2913) | int filledPolygonColor(SDL_Renderer * renderer, const Sint16 * vx, const...
  function filledPolygonRGBA (line 2933) | int filledPolygonRGBA(SDL_Renderer * renderer, const Sint16 * vx, const ...
  function _HLineTextured (line 2955) | int _HLineTextured(SDL_Renderer *renderer, Sint16 x1, Sint16 x2, Sint16 ...
  function texturedPolygonMT (line 3054) | int texturedPolygonMT(SDL_Renderer *renderer, const Sint16 * vx, const S...
  function texturedPolygon (line 3226) | int texturedPolygon(SDL_Renderer *renderer, const Sint16 * vx, const Sin...
  function gfxPrimitivesSetFont (line 3296) | void gfxPrimitivesSetFont(const void *fontdata, Uint32 cw, Uint32 ch)
  function gfxPrimitivesSetFontRotation (line 3347) | void gfxPrimitivesSetFontRotation(Uint32 rotation)
  function gfxPrimitivesSetFontZoom (line 3379) | void gfxPrimitivesSetFontZoom(Uint32 zoomx, Uint32 zoomy)
  function characterRGBA (line 3408) | int characterRGBA(SDL_Renderer *renderer, Sint16 x, Sint16 y, char c, Ui...
  function characterColor (line 3540) | int characterColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, char c, ...
  function stringColor (line 3561) | int stringColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, const char ...
  function stringRGBA (line 3581) | int stringRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, const char *...
  function _evaluateBezier (line 3622) | double _evaluateBezier (double *data, int ndata, double t)
  function bezierColor (line 3681) | int bezierColor(SDL_Renderer * renderer, const Sint16 * vx, const Sint16...
  function bezierRGBA (line 3702) | int bezierRGBA(SDL_Renderer * renderer, const Sint16 * vx, const Sint16 ...
  function _bresenhamInitialize (line 3789) | int _bresenhamInitialize(SDL2_gfxBresenhamIterator *b, Sint16 x1, Sint16...
  function _bresenhamIterate (line 3851) | int _bresenhamIterate(SDL2_gfxBresenhamIterator *b)
  function x_perpendicular (line 3893) | static void x_perpendicular(SDL_Renderer *B,
  function x_varthick_line (line 3951) | static void x_varthick_line
  function y_perpendicular (line 4005) | static void y_perpendicular(SDL_Renderer *B,
  function y_varthick_line (line 4063) | static void y_varthick_line
  function draw_varthick_line (line 4117) | void draw_varthick_line(SDL_Renderer *B, int style,
  function thickLineColor (line 4170) | int thickLineColor(SDL_Renderer *renderer, Sint16 x1, Sint16 y1, Sint16 ...
  function thickLineColorStyle (line 4177) | int thickLineColorStyle(SDL_Renderer *renderer, Sint16 x1, Sint16 y1, Si...
  function thickLineRGBA (line 4201) | int thickLineRGBA(SDL_Renderer *renderer, Sint16 x1, Sint16 y1, Sint16 x...
  function RedefineChar (line 4233) | int RedefineChar(SDL_Renderer *renderer, char c, unsigned char *charpos,...
  function renderdrawline (line 4311) | static int renderdrawline(SDL_Renderer *renderer, int x1, int y1, int x2...
  function hlinecliparc (line 4351) | static int hlinecliparc(SDL_Renderer *renderer, int x1, int x2, int y, i...
  function thickEllipseRGBA (line 4400) | int thickEllipseRGBA(SDL_Renderer * renderer, Sint16 xc, Sint16 yc, Sint...
  function thickArcRGBA (line 4485) | int thickArcRGBA(SDL_Renderer * renderer, Sint16 xc, Sint16 yc, Sint16 r...
  function thickCircleRGBA (line 4533) | int thickCircleRGBA(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 ...
  function thickEllipseColor (line 4539) | int thickEllipseColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint1...
  function thickArcColor (line 4546) | int thickArcColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16 ra...
  function thickCircleColor (line 4553) | int thickCircleColor(SDL_Renderer * renderer, Sint16 x, Sint16 y, Sint16...
  function filledPolyBezierRGBA (line 4574) | int filledPolyBezierRGBA(SDL_Renderer * renderer, const Sint16 *x, const...
  function filledPolyBezierColor (line 4645) | int filledPolyBezierColor(SDL_Renderer * renderer, const Sint16 *x, cons...
  function aaFilledEllipseRGBA (line 4668) | int aaFilledEllipseRGBA(SDL_Renderer * renderer, float cx, float cy, flo...
  function aaFilledEllipseColor (line 4783) | int aaFilledEllipseColor(SDL_Renderer * renderer, float cx, float cy, fl...
  function _gfxPrimitivesCompareFloat2 (line 4789) | static int _gfxPrimitivesCompareFloat2(const void *a, const void *b)
  function aaFilledPolygonRGBA (line 4815) | int aaFilledPolygonRGBA(SDL_Renderer * renderer, const double * vx, cons...
  function aaFilledPolygonColor (line 5026) | int aaFilledPolygonColor(SDL_Renderer * renderer, const double * vx, con...
  function aaFilledPieRGBA (line 5050) | int aaFilledPieRGBA(SDL_Renderer * renderer, float cx, float cy, float r...
  function aaFilledPieColor (line 5102) | int aaFilledPieColor(SDL_Renderer * renderer, float cx, float cy, float ...
  function aaArcRGBA (line 5126) | int aaArcRGBA(SDL_Renderer * renderer, float cx, float cy, float rx, flo...
  function aaArcColor (line 5177) | int aaArcColor(SDL_Renderer * renderer, float cx, float cy, float rx, fl...
  function aaBezierRGBA (line 5199) | int aaBezierRGBA(SDL_Renderer * renderer, double *x, double *y, int n, i...
  function aaBezierColor (line 5255) | int aaBezierColor(SDL_Renderer * renderer, double *x, double *y, int n, ...
  function aaFilledPolyBezierRGBA (line 5276) | int aaFilledPolyBezierRGBA(SDL_Renderer * renderer, double *x, double *y...
  function aaFilledPolyBezierColor (line 5326) | int aaFilledPolyBezierColor(SDL_Renderer * renderer, double *x, double *...

FILE: src/SDL2_rotozoom.c
  function SDL_STBIMG_DEF (line 47) | SDL_STBIMG_DEF int GFX_bezierColor(SDL_Renderer* renderer, const Sint16*...
  function SDL_STBIMG_DEF (line 50) | SDL_STBIMG_DEF int GFX_filledPolyBezierColor(SDL_Renderer * renderer, co...
  function SDL_STBIMG_DEF (line 53) | SDL_STBIMG_DEF int GFX_aaFilledEllipseColor(SDL_Renderer * renderer, flo...
  function SDL_STBIMG_DEF (line 56) | SDL_STBIMG_DEF int GFX_aaFilledPolygonColor(SDL_Renderer * renderer, con...
  function SDL_STBIMG_DEF (line 59) | SDL_STBIMG_DEF int GFX_aaFilledPieColor(SDL_Renderer * renderer, float c...
  function SDL_STBIMG_DEF (line 62) | SDL_STBIMG_DEF int GFX_aaArcColor(SDL_Renderer * renderer, float cx, flo...
  function SDL_STBIMG_DEF (line 65) | SDL_STBIMG_DEF int GFX_aaBezierColor(SDL_Renderer * renderer, double *x,...
  function SDL_STBIMG_DEF (line 68) | SDL_STBIMG_DEF int GFX_aaFilledPolyBezierColor(SDL_Renderer * renderer, ...
  function SDL_STBIMG_DEF (line 71) | SDL_STBIMG_DEF double GFX_EvaluateBezier(double *data, int ndata, double t)
  function SDL_STBIMG_DEF (line 74) | SDL_STBIMG_DEF SDL_Surface* GFX_RotoZoomSurface(SDL_Surface * src, doubl...
  type tColorRGBA (line 82) | typedef struct tColorRGBA {
  type tColorY (line 92) | typedef struct tColorY {
  function Uint32 (line 121) | Uint32 _colorkey(SDL_Surface *src)
  function _shrinkSurfaceRGBA (line 144) | int _shrinkSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int factorx...
  function _shrinkSurfaceY (line 232) | int _shrinkSurfaceY(SDL_Surface * src, SDL_Surface * dst, int factorx, i...
  function _zoomSurfaceRGBA (line 315) | int _zoomSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int flipx, in...
  function _zoomSurfaceY (line 548) | int _zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst, int flipx, int f...
  function _transformSurfaceRGBA (line 667) | void _transformSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int cx,...
  function transformSurfaceY (line 784) | void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int...
  function SDL_Surface (line 841) | SDL_Surface* rotateSurface90Degrees(SDL_Surface* src, int numClockwiseTu...
  function _rotozoomSurfaceSizeTrig (line 992) | void _rotozoomSurfaceSizeTrig(int width, int height, double angle, doubl...
  function rotozoomSurfaceSizeXY (line 1034) | void rotozoomSurfaceSizeXY(int width, int height, double angle, double z...
  function rotozoomSurfaceSize (line 1051) | void rotozoomSurfaceSize(int width, int height, double angle, double zoo...
  function SDL_Surface (line 1073) | SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoo...
  function SDL_Surface (line 1094) | SDL_Surface *rotozoomSurfaceXY(SDL_Surface * src, double angle, double z...
  function zoomSurfaceSize (line 1349) | void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, ...
  function SDL_Surface (line 1399) | SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, ...
  function SDL_Surface (line 1550) | SDL_Surface *shrinkSurface(SDL_Surface *src, int factorx, int factory)

FILE: src/b2Alias.cpp
  class DebugDraw (line 14) | class DebugDraw : public b2Draw { // b2Draw has all the virtual function...
  function VISIBLE (line 134) | VISIBLE int b2NewWorld(void* a, void* b) { return _ZN7b2WorldC1ERK6b2Vec...
  function VISIBLE (line 135) | VISIBLE int b2CircleShape(void* a) { return _ZN13b2CircleShapeC1Ev(a); }
  function VISIBLE (line 136) | VISIBLE int b2PolygonShape(void* a) { return _ZN14b2PolygonShapeC1Ev(a); }
  function VISIBLE (line 137) | VISIBLE int b2ChainShape(void* a) { return _ZN12b2ChainShapeC1Ev(a); }
  function VISIBLE (line 138) | VISIBLE void b2SetUserDataB(void* a, void* b) { _ZN6b2Body11SetUserDataE...
  function VISIBLE (line 139) | VISIBLE void b2SetUserDataF(void* a, void* b) { _ZN9b2Fixture11SetUserDa...
  function VISIBLE (line 140) | VISIBLE void b2SetUserDataJ(void* a, void* b) { _ZN7b2Joint11SetUserData...
  function VISIBLE (line 141) | VISIBLE void b2DestroyBody(void* a, void* b) { _ZN7b2World11DestroyBodyE...
  function VISIBLE (line 142) | VISIBLE void b2SetNextVertex(void* a, void* b) { _ZN12b2ChainShape13SetN...
  function VISIBLE (line 143) | VISIBLE void b2SetPrevVertex(void* a, void* b) { _ZN12b2ChainShape13SetP...
  function VISIBLE (line 144) | VISIBLE void b2SetFilterData(void* a, void* b) { _ZN9b2Fixture13SetFilte...
  function VISIBLE (line 145) | VISIBLE void b2DestroyFixture(void* a, void* b) { _ZN6b2Body14DestroyFix...
  function VISIBLE (line 146) | VISIBLE void b2SetLinearVelocity(void* a, void* b) { _ZN6b2Body17SetLine...
  function VISIBLE (line 147) | VISIBLE void b2SetGravity(void* a, void* b) { _ZN7b2World10SetGravityERK...
  function VISIBLE (line 148) | VISIBLE void b2SetTarget(void* a, void* b) { _ZN12b2MouseJoint9SetTarget...
  function VISIBLE (line 149) | VISIBLE void b2DestroyJoint(void* a, void* b) { _ZN7b2World12DestroyJoin...
  function b2DistanceJointGetAnchorA (line 152) | VISIBLE long long b2DistanceJointGetAnchorA(void* a, void* b) { return _...
  function b2DistanceJointGetAnchorB (line 153) | VISIBLE long long b2DistanceJointGetAnchorB(void* a, void* b) { return _...
  function b2PulleyJointGetAnchorA (line 154) | VISIBLE long long b2PulleyJointGetAnchorA(void* a, void* b) { return _ZN...
  function b2PulleyJointGetAnchorB (line 155) | VISIBLE long long b2PulleyJointGetAnchorB(void* a, void* b) { return _ZN...
  function b2RopeJointGetAnchorA (line 156) | VISIBLE long long b2RopeJointGetAnchorA(void* a, void* b) { return _ZNK1...
  function b2RopeJointGetAnchorB (line 157) | VISIBLE long long b2RopeJointGetAnchorB(void* a, void* b) { return _ZNK1...
  function VISIBLE (line 159) | VISIBLE bool b2IsAwake(void* a) { return _ZNK6b2Body7IsAwakeEv(a); }
  function VISIBLE (line 160) | VISIBLE bool b2IsTouching(void* a) { return _ZNK9b2Contact10IsTouchingEv...
  function VISIBLE (line 161) | VISIBLE int b2GetChildIndexA(void* a) { return _ZNK9b2Contact14GetChildI...
  function VISIBLE (line 162) | VISIBLE int b2GetChildIndexB(void* a) { return _ZNK9b2Contact14GetChildI...
  function VISIBLE (line 163) | VISIBLE double b2GetMass(void* a) { return _ZNK6b2Body7GetMassEv(a); }
  function VISIBLE (line 164) | VISIBLE double b2GetAngularVelocity(void* a) { return _ZNK6b2Body18GetAn...
  function VISIBLE (line 165) | VISIBLE void* b2GetLinearVelocity(void* a) { return _ZNK6b2Body17GetLine...
  function VISIBLE (line 167) | VISIBLE void* b2CreateBody(void* a, void* b) { return _ZN7b2World10Creat...
  function VISIBLE (line 168) | VISIBLE void* b2GetBody(void* a) { return _ZN9b2Fixture7GetBodyEv(a); }
  function VISIBLE (line 169) | VISIBLE void* b2GetShape(void* a) { return _ZN9b2Fixture8GetShapeEv(a); }
  function VISIBLE (line 170) | VISIBLE void* b2GetTransform(void* a) { return _ZNK6b2Body12GetTransform...
  function VISIBLE (line 171) | VISIBLE void* b2GetUserDataB(void* a) { return _ZNK6b2Body11GetUserDataE...
  function VISIBLE (line 172) | VISIBLE void* b2GetUserDataF(void* a) { return _ZNK9b2Fixture11GetUserDa...
  function VISIBLE (line 173) | VISIBLE void* b2GetUserDataJ(void* a) { return _ZNK7b2Joint11GetUserData...
  function VISIBLE (line 174) | VISIBLE void* b2GetBodyA(void* a) { return _ZN7b2Joint8GetBodyAEv(a); }
  function VISIBLE (line 175) | VISIBLE void* b2GetBodyB(void* a) { return _ZN7b2Joint8GetBodyBEv(a); }
  function VISIBLE (line 176) | VISIBLE void* b2GetContactListW(void* a) { return _ZN7b2World14GetContac...
  function VISIBLE (line 177) | VISIBLE void* b2GetContactListB(void* a) { return _ZN6b2Body14GetContact...
  function VISIBLE (line 178) | VISIBLE void* b2GetNextContact(void* a) { return _ZN9b2Contact7GetNextEv...
  function VISIBLE (line 179) | VISIBLE void* b2GetFixtureA(void* a) { return _ZN9b2Contact11GetFixtureA...
  function VISIBLE (line 180) | VISIBLE void* b2GetFixtureB(void* a) { return _ZN9b2Contact11GetFixtureB...
  function VISIBLE (line 181) | VISIBLE void* b2GetBodyList(void* a) { return _ZN7b2World11GetBodyListEv...
  function VISIBLE (line 182) | VISIBLE void* b2GetNextBody(void* a) { return _ZN6b2Body7GetNextEv(a); }
  function VISIBLE (line 183) | VISIBLE void* b2CreateFixtureFromDef(void* a, void* b) { return _ZN6b2Bo...
  function VISIBLE (line 184) | VISIBLE void* b2CreateJoint(void* a, void* b) { return _ZN7b2World11Crea...
  function VISIBLE (line 186) | VISIBLE void* b2CreateFixtureFromShape(void* a, void* b, float c) { retu...
  function VISIBLE (line 188) | VISIBLE void b2SetActive(void* a, bool b) { _ZN6b2Body9SetActiveEb(a, b); }
  function VISIBLE (line 189) | VISIBLE void b2SetAwake(void* a, bool b) { _ZN6b2Body8SetAwakeEb(a, b); }
  function VISIBLE (line 190) | VISIBLE void b2SetBullet(void* a, bool b) { _ZN6b2Body9SetBulletEb(a, b); }
  function VISIBLE (line 191) | VISIBLE void b2SetFixedRotation(void* a, bool b) { _ZN6b2Body16SetFixedR...
  function VISIBLE (line 192) | VISIBLE void b2SetSensor(void* a, bool b) { _ZN9b2Fixture9SetSensorEb(a,...
  function VISIBLE (line 193) | VISIBLE void b2SetSleepingAllowed(void* a, bool b) { _ZN6b2Body18SetSlee...
  function VISIBLE (line 195) | VISIBLE void b2EnableMotorP(void* a, bool b) { _ZN16b2PrismaticJoint11En...
  function VISIBLE (line 196) | VISIBLE void b2EnableMotorR(void* a, bool b) { _ZN15b2RevoluteJoint11Ena...
  function VISIBLE (line 197) | VISIBLE void b2EnableMotorW(void* a, bool b) { _ZN12b2WheelJoint11Enable...
  function VISIBLE (line 199) | VISIBLE void b2CreateChain(void* a, void* b, int c) { _ZN12b2ChainShape1...
  function VISIBLE (line 200) | VISIBLE void b2CreateLoop(void* a, void* b, int c) { _ZN12b2ChainShape10...
  function VISIBLE (line 201) | VISIBLE void b2SetPolygon(void* a, void* b, int c) { _ZN14b2PolygonShape...
  function VISIBLE (line 203) | VISIBLE void b2SetTransform(void* a, void* b, float c) { _ZN6b2Body12Set...
  function VISIBLE (line 204) | VISIBLE void b2SetAsBox(void* a, float b, float c) { _ZN14b2PolygonShape...
  function VISIBLE (line 205) | VISIBLE void b2SetAsOrientedBox(void* a, float b, float c, void* d, floa...
  function VISIBLE (line 206) | VISIBLE void b2WorldStep(void* a, float b, int c, int d) { _ZN7b2World4S...
  function VISIBLE (line 208) | VISIBLE void b2ApplyForce(void* a, void* b, void* c, bool d) { _ZN6b2Bod...
  function VISIBLE (line 209) | VISIBLE void b2ApplyLinearImpulse(void* a, void* b, void* c, bool d) { _...
  function VISIBLE (line 210) | VISIBLE void b2ApplyTorque(void* a, float b, bool c) { _ZN6b2Body11Apply...
  function VISIBLE (line 212) | VISIBLE void b2SetAngularVelocity(void* a, float b) { _ZN6b2Body18SetAng...
  function VISIBLE (line 213) | VISIBLE void b2SetMaxMotorForceP(void* a, float b) { _ZN16b2PrismaticJoi...
  function VISIBLE (line 214) | VISIBLE void b2SetMaxMotorTorqueR(void* a, float b) { _ZN15b2RevoluteJoi...
  function VISIBLE (line 215) | VISIBLE void b2SetMaxMotorTorqueW(void* a, float b) { _ZN12b2WheelJoint1...
  function VISIBLE (line 216) | VISIBLE void b2SetMotorSpeedP(void* a, float b) { _ZN16b2PrismaticJoint1...
  function VISIBLE (line 217) | VISIBLE void b2SetMotorSpeedR(void* a, float b) { _ZN15b2RevoluteJoint13...
  function VISIBLE (line 218) | VISIBLE void b2SetMotorSpeedW(void* a, float b) { _ZN12b2WheelJoint13Set...
  function VISIBLE (line 220) | VISIBLE void b2DistanceJointInit(void* a, void* b, void* c, void* d, voi...
  function VISIBLE (line 221) | VISIBLE void b2FrictionJointInit(void* a, void* b, void* c, void* d) { _...
  function VISIBLE (line 222) | VISIBLE void b2PrismaticJointInit(void* a, void* b, void* c, void* d, vo...
  function VISIBLE (line 223) | VISIBLE void b2PulleyJointInit(void* a, void* b, void* c, void* d, void*...
  function VISIBLE (line 224) | VISIBLE void b2RevoluteJointInit(void* a, void* b, void* c, void* d) { _...
  function VISIBLE (line 225) | VISIBLE void b2WeldJointInit(void* a, void* b, void* c, void* d) { _ZN14...
  function VISIBLE (line 226) | VISIBLE void b2WheelJointInit(void* a, void* b, void* c, void* d, void* ...
  function VISIBLE (line 230) | VISIBLE void b2DrawDebugData(void* a) { _ZN7b2World13DrawDebugDataEv(a) ; }
  function VISIBLE (line 231) | VISIBLE void b2DebugInit(b2World* world, void* device, void* polygon, in...
  function VISIBLE (line 240) | VISIBLE void b2DebugMatrix(double scale, double xoff, double yoff)
  function b2NewWorld (line 256) | long long b2NewWorld(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2CircleShape (line 260) | long long b2CircleShape(st a, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function b2PolygonShape (line 264) | long long b2PolygonShape(st a, st i1, st i2, st i3, st i4, st i5, st i6,...
  function b2ChainShape (line 268) | long long b2ChainShape(st a, st i1, st i2, st i3, st i4, st i5, st i6, s...
  function b2SetUserDataB (line 272) | long long b2SetUserDataB(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2SetUserDataF (line 276) | long long b2SetUserDataF(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2SetUserDataJ (line 280) | long long b2SetUserDataJ(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2DestroyBody (line 284) | long long b2DestroyBody(st a, st b, st i2, st i3, st i4, st i5, st i6, s...
  function b2SetNextVertex (line 288) | long long b2SetNextVertex(st a, st b, st i2, st i3, st i4, st i5, st i6,...
  function b2SetPrevVertex (line 292) | long long b2SetPrevVertex(st a, st b, st i2, st i3, st i4, st i5, st i6,...
  function b2SetFilterData (line 296) | long long b2SetFilterData(st a, st b, st i2, st i3, st i4, st i5, st i6,...
  function b2DestroyFixture (line 300) | long long b2DestroyFixture(st a, st b, st i2, st i3, st i4, st i5, st i6...
  function b2SetLinearVelocity (line 304) | long long b2SetLinearVelocity(st a, st b, st i2, st i3, st i4, st i5, st...
  function b2SetGravity (line 308) | long long b2SetGravity(st a, st b, st i2, st i3, st i4, st i5, st i6, st...
  function b2SetTarget (line 312) | long long b2SetTarget(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2DestroyJoint (line 316) | long long b2DestroyJoint(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2DistanceJointGetAnchorA (line 320) | long long b2DistanceJointGetAnchorA(st a, st b, st i2, st i3, st i4, st ...
  function b2DistanceJointGetAnchorB (line 324) | long long b2DistanceJointGetAnchorB(st a, st b, st i2, st i3, st i4, st ...
  function b2PulleyJointGetAnchorA (line 328) | long long b2PulleyJointGetAnchorA(st a, st b, st i2, st i3, st i4, st i5...
  function b2PulleyJointGetAnchorB (line 332) | long long b2PulleyJointGetAnchorB(st a, st b, st i2, st i3, st i4, st i5...
  function b2RopeJointGetAnchorA (line 336) | long long b2RopeJointGetAnchorA(st a, st b, st i2, st i3, st i4, st i5, ...
  function b2RopeJointGetAnchorB (line 340) | long long b2RopeJointGetAnchorB(st a, st b, st i2, st i3, st i4, st i5, ...
  function b2IsAwake (line 344) | long long b2IsAwake(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2IsTouching (line 348) | long long b2IsTouching(st a, st i1, st i2, st i3, st i4, st i5, st i6, s...
  function b2GetChildIndexA (line 352) | long long b2GetChildIndexA(st a, st i1, st i2, st i3, st i4, st i5, st i...
  function b2GetChildIndexB (line 356) | long long b2GetChildIndexB(st a, st i1, st i2, st i3, st i4, st i5, st i...
  function b2GetMass (line 360) | double b2GetMass(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2GetAngularVelocity (line 364) | double b2GetAngularVelocity(st a, st i1, st i2, st i3, st i4, st i5, st ...
  function b2GetLinearVelocity (line 368) | long long b2GetLinearVelocity(st a, st i1, st i2, st i3, st i4, st i5, s...
  function b2CreateBody (line 372) | long long b2CreateBody(st a, st b, st i2, st i3, st i4, st i5, st i6, st...
  function b2GetBody (line 376) | long long b2GetBody(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2GetShape (line 380) | long long b2GetShape(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2GetTransform (line 384) | long long b2GetTransform(st a, st i1, st i2, st i3, st i4, st i5, st i6,...
  function b2GetUserDataB (line 388) | long long b2GetUserDataB(st a, st i1, st i2, st i3, st i4, st i5, st i6,...
  function b2GetUserDataF (line 392) | long long b2GetUserDataF(st a, st i1, st i2, st i3, st i4, st i5, st i6,...
  function b2GetUserDataJ (line 396) | long long b2GetUserDataJ(st a, st i1, st i2, st i3, st i4, st i5, st i6,...
  function b2GetBodyA (line 400) | long long b2GetBodyA(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2GetBodyB (line 404) | long long b2GetBodyB(st a, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2GetContactListW (line 408) | long long b2GetContactListW(st a, st i1, st i2, st i3, st i4, st i5, st ...
  function b2GetContactListB (line 412) | long long b2GetContactListB(st a, st i1, st i2, st i3, st i4, st i5, st ...
  function b2GetNextContact (line 416) | long long b2GetNextContact(st a, st i1, st i2, st i3, st i4, st i5, st i...
  function b2GetFixtureA (line 420) | long long b2GetFixtureA(st a, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function b2GetFixtureB (line 424) | long long b2GetFixtureB(st a, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function b2GetBodyList (line 428) | long long b2GetBodyList(st a, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function b2GetNextBody (line 432) | long long b2GetNextBody(st a, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function b2CreateFixtureFromDef (line 436) | long long b2CreateFixtureFromDef(st a, st b, st i2, st i3, st i4, st i5,...
  function b2CreateJoint (line 440) | long long b2CreateJoint(st a, st b, st i2, st i3, st i4, st i5, st i6, s...
  function b2CreateFixtureFromShape (line 444) | long long b2CreateFixtureFromShape(st a, st b, st c, st i3, st i4, st i5...
  function b2SetActive (line 448) | long long b2SetActive(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2SetAwake (line 452) | long long b2SetAwake(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2SetBullet (line 456) | long long b2SetBullet(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2SetFixedRotation (line 460) | long long b2SetFixedRotation(st a, st b, st i2, st i3, st i4, st i5, st ...
  function b2SetSensor (line 464) | long long b2SetSensor(st a, st b, st i2, st i3, st i4, st i5, st i6, st i7,
  function b2SetSleepingAllowed (line 468) | long long b2SetSleepingAllowed(st a, st b, st i2, st i3, st i4, st i5, s...
  function b2EnableMotorP (line 472) | long long b2EnableMotorP(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2EnableMotorR (line 476) | long long b2EnableMotorR(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2EnableMotorW (line 480) | long long b2EnableMotorW(st a, st b, st i2, st i3, st i4, st i5, st i6, ...
  function b2CreateChain (line 484) | long long b2CreateChain(st a, st b, st c, st i3, st i4, st i5, st i6, st...
  function b2CreateLoop (line 488) | long long b2CreateLoop(st a, st b, st c, st i3, st i4, st i5, st i6, st i7,
  function b2SetPolygon (line 492) | long long b2SetPolygon(st a, st b, st c, st i3, st i4, st i5, st i6, st i7,
  function b2SetTransform (line 496) | long long b2SetTransform(st a, st b, st c, st i3, st i4, st i5, st i6, s...
  function b2SetAsBox (line 500) | long long b2SetAsBox(st a, st b, st c, st i3, st i4, st i5, st i6, st i7,
  function b2SetAsOrientedBox (line 504) | long long b2SetAsOrientedBox(st a, st b, st c, st d, st e, st i5, st i6,...
  function b2WorldStep (line 508) | long long b2WorldStep(st a, st b, st c, st d, st i4, st i5, st i6, st i7,
  function b2ApplyForce (line 512) | long long b2ApplyForce(st a, st b, st c, st d, st i4, st i5, st i6, st i7,
  function b2ApplyLinearImpulse (line 516) | long long b2ApplyLinearImpulse(st a, st b, st c, st d, st i4, st i5, st ...
  function b2ApplyTorque (line 520) | long long b2ApplyTorque(st a, st b, st c, st i3, st i4, st i5, st i6, st...
  function b2SetAngularVelocity (line 524) | long long b2SetAngularVelocity(st a, st b, st i2, st i3, st i4, st i5, s...
  function b2SetMaxMotorForceP (line 528) | long long b2SetMaxMotorForceP(st a, st b, st i2, st i3, st i4, st i5, st...
  function b2SetMaxMotorTorqueR (line 532) | long long b2SetMaxMotorTorqueR(st a, st b, st i2, st i3, st i4, st i5, s...
  function b2SetMaxMotorTorqueW (line 536) | long long b2SetMaxMotorTorqueW(st a, st b, st i2, st i3, st i4, st i5, s...
  function b2SetMotorSpeedP (line 540) | long long b2SetMotorSpeedP(st a, st b, st i2, st i3, st i4, st i5, st i6...
  function b2SetMotorSpeedR (line 544) | long long b2SetMotorSpeedR(st a, st b, st i2, st i3, st i4, st i5, st i6...
  function b2SetMotorSpeedW (line 548) | long long b2SetMotorSpeedW(st a, st b, st i2, st i3, st i4, st i5, st i6...
  function b2DistanceJointInit (line 552) | long long b2DistanceJointInit(st a, st b, st c, st d, st e, st i5, st i6...
  function b2FrictionJointInit (line 556) | long long b2FrictionJointInit(st a, st b, st c, st d, st i4, st i5, st i...
  function b2PrismaticJointInit (line 560) | long long b2PrismaticJointInit(st a, st b, st c, st d, st e, st i5, st i...
  function b2PulleyJointInit (line 564) | long long b2PulleyJointInit(st a, st b, st c, st d, st e, st f, st g, st h,
  function b2RevoluteJointInit (line 568) | long long b2RevoluteJointInit(st a, st b, st c, st d, st i4, st i5, st i...
  function b2WeldJointInit (line 572) | long long b2WeldJointInit(st a, st b, st c, st d, st i4, st i5, st i6, s...
  function b2WheelJointInit (line 576) | long long b2WheelJointInit(st a, st b, st c, st d, st e, st i5, st i6, s...
  function b2DrawDebugData (line 580) | long long b2DrawDebugData(st a, st i1, st i2, st i3, st i4, st i5, st i6...
  function b2DebugInit (line 584) | long long b2DebugInit(st a, st b, st c, st d, st i4, st i5, st i6, st i7,
  function b2DebugMatrix (line 595) | long long b2DebugMatrix(st i0, st i1, st i2, st i3, st i4, st i5, st i6,...
  function B2D_GetProcAddress (line 776) | long long B2D_GetProcAddress(st symbol, st i1, st i2, st i3, st i4, st i...
  function uint32 (line 797) | static uint32 abgr(const b2Color& color)

FILE: src/bbasmb_arm_32.c
  function lookup (line 116) | static int lookup (char **arr, int num)
  function reg (line 131) | static unsigned char reg (void)
  function shift (line 146) | static unsigned char shift (void)
  function stackop (line 156) | static unsigned char stackop (int mnemonic)
  function shiftcount (line 166) | static unsigned char shiftcount (void)
  function immrot (line 174) | static int immrot (unsigned int n)
  function reglist (line 191) | static int reglist (void)
  function shifter_operand (line 218) | static int shifter_operand (void)
  function offset (line 242) | static int offset (unsigned char *pimm, unsigned char *pplus)
  function tabit (line 266) | static void tabit (int x)
  function poke (line 275) | static void poke (void *p, int n)
  function assemble (line 301) | void assemble (void)

FILE: src/bbasmb_arm_64.c
  function hash (line 74) | static void hash (void)
  function open_square (line 81) | static void open_square (void)
  function reg_size (line 92) | static inline int reg_size( unsigned reg )
  function reg (line 98) | static unsigned char reg (void)
  function optional_zero_offset (line 155) | static inline void optional_zero_offset (void)
  function close_square (line 167) | static inline void close_square (void)
  function assembler_error (line 174) | static inline void assembler_error (void)
  function is_sp (line 179) | static int is_sp( unsigned r )
  function is_zero (line 184) | static int is_zero( unsigned r )
  type mnemonics (line 288) | enum mnemonics {
  function lookup (line 392) | static int lookup (char **arr, int num)
  function lookup_mnemonic (line 414) | static enum mnemonics lookup_mnemonic(void)
  function shift_type (line 477) | static int shift_type(void)
  function tabit (line 487) | static void tabit (int x)
  function poke (line 496) | static void poke (void *p, int n)
  type addressing_mode (line 538) | enum addressing_mode { REG_UXTW, REG_SXTW, REG_SXTX, REG_LSL, REG_UNMODI...
  type addressing (line 546) | struct addressing {
  function read_addressing (line 554) | static struct addressing read_addressing(void)
  function rotl32 (line 625) | static inline unsigned rotl32( unsigned n )
  function rotl64 (line 630) | static inline unsigned long long rotl64( unsigned long long n )
  function validated_condition (line 635) | static int validated_condition(void)
  function validated_literal_offset (line 650) | static inline unsigned validated_literal_offset ( int imm )
  function validated_N_immr_imms (line 657) | static int validated_N_immr_imms( long long imm, unsigned word_data )
  function validated_imm9 (line 779) | static int validated_imm9( int imm )
  function validated_imm12 (line 788) | static int validated_imm12( int imm, int alignment )
  function validated_number_0_to_15 (line 803) | static unsigned validated_number_0_to_15(void)
  function validated_system_register (line 831) | static unsigned validated_system_register(void)
  function validated_FB_SIMD_instruction (line 898) | static unsigned validated_FB_SIMD_instruction( enum mnemonics mnemnonic )
  function assemble (line 904) | void assemble (void)

FILE: src/bbasmb_arm_v6m.c
  function asmerr (line 191) | static void asmerr (int ierr)
  function lookup (line 201) | static int lookup (const char **arr, int num)
  function status (line 216) | static int status (void)
  function chkstatus (line 226) | static void chkstatus (void)
  function reg (line 232) | static unsigned char reg (void)
  function reg8 (line 247) | static unsigned char reg8 (void)
  function reglist (line 254) | static int reglist (void)
  function offset (line 281) | static int offset (int *pbImm)
  function offset2 (line 293) | static int offset2 (int *pbImm)
  function tabit (line 309) | static void tabit (int x)
  function poke (line 318) | static void poke (const void *p, int n)
  function eol (line 344) | static inline int eol (char ch)
  function asarg (line 349) | static void asarg (int *rd, int *rn, int *offreg, int *bImm)
  function addsi (line 377) | static int addsi (int rd, int rn, int offreg)
  function assemble (line 409) | void assemble (void)

FILE: src/bbasmb_wasm32.c
  type st (line 28) | typedef size_t st ;
  type db (line 29) | typedef double db ;
  type drmp3_config (line 33) | typedef struct
  function assemble (line 52) | void assemble (void)
  function WASM_RenderSetClipRect (line 61) | long long WASM_RenderSetClipRect(st renderer, st rect, st i2, st i3, st ...
  function BBC_bezierColor (line 65) | long long BBC_bezierColor(st renderer, st vx, st vy, st n, st s, st colo...
  function BBC_filledPolyBezierColor (line 69) | long long BBC_filledPolyBezierColor(st renderer, st vx, st vy, st n, st ...
  function BBC_aaFilledEllipseColor (line 73) | long long BBC_aaFilledEllipseColor(st renderer, st i1, st i2, st i3, st ...
  function BBC_aaFilledPolygonColor (line 81) | long long BBC_aaFilledPolygonColor(st renderer, st vx, st vy, st n, st c...
  function BBC_aaFilledPieColor (line 85) | long long BBC_aaFilledPieColor(st renderer, st i1, st i2, st i3, st i4, ...
  function BBC_aaArcColor (line 94) | long long BBC_aaArcColor(st renderer, st i1, st i2, st i3, st i4, st i5,...
  function BBC_aaBezierColor (line 103) | long long BBC_aaBezierColor(st renderer, st x, st y, st n, st s, st i5, ...
  function BBC_aaFilledPolyBezierColor (line 110) | long long BBC_aaFilledPolyBezierColor(st renderer, st x, st y, st n, st ...
  function BBC_EvaluateBezier (line 114) | double BBC_EvaluateBezier(st data, st ndata, st i2, st i3, st i4, st i5,...
  function BBC_RotoZoomSurface (line 118) | long long BBC_RotoZoomSurface(st src, st i1, st i2, st i3, st i4, st i5,...
  function BBC_CreateTextureFromSurface (line 124) | long long BBC_CreateTextureFromSurface(st renderer, st surface, st i2, s...
  function BBC_DestroyTexture (line 128) | long long BBC_DestroyTexture(st texture, st i1, st i2, st i3, st i4, st ...
  function BBC_FreeSurface (line 132) | long long BBC_FreeSurface(st surface, st i1, st i2, st i3, st i4, st i5,...
  function BBC_QueryTexture (line 136) | long long BBC_QueryTexture(st texture, st format, st access, st w, st h,...
  function BBC_RenderCopyEx (line 140) | long long BBC_RenderCopyEx(st renderer, st texture, st srcrect, st dstre...
  function BBC_RenderCopyExF (line 148) | long long BBC_RenderCopyExF(st renderer, st texture, st srcrect, st dstr...
  function BBC_SetTextureAlphaMod (line 156) | long long BBC_SetTextureAlphaMod(st texture, st alpha, st i2, st i3, st ...
  function BBC_SetTextureBlendMode (line 160) | long long BBC_SetTextureBlendMode(st texture, st blendmode, st i2, st i3...
  function BBC_SetTextureColorMod (line 164) | long long BBC_SetTextureColorMod(st texture, st r, st g, st b, st i4, st...
  function BBC_SetColorKey (line 168) | long long BBC_SetColorKey(st surface, st flag, st key, st i3, st i4, st ...
  function BBC_CreateTexture (line 172) | long long BBC_CreateTexture(st renderer, st format, st access, st w, st ...
  function BBC_GetRenderTarget (line 176) | long long BBC_GetRenderTarget(st renderer, st i1, st i2, st i3, st i4, s...
  function BBC_SetRenderTarget (line 180) | long long BBC_SetRenderTarget(st renderer, st texture, st i2, st i3, st ...
  function BBC_RenderCopy (line 184) | long long BBC_RenderCopy(st renderer, st texture, st srcrect, st dstrect...
  function BBC_RenderCopyF (line 188) | long long BBC_RenderCopyF(st renderer, st texture, st srcrect, st dstrec...
  function BBC_SetRenderDrawBlendMode (line 192) | long long BBC_SetRenderDrawBlendMode(st renderer, st mode, st i2, st i3,...
  function BBC_SetRenderDrawColor (line 196) | long long BBC_SetRenderDrawColor(st renderer, st r, st g, st b, st a, st...
  function BBC_RenderFillRect (line 200) | long long BBC_RenderFillRect(st renderer, st rect, st i2, st i3, st i4, ...
  function BBC_RenderFillRects (line 204) | long long BBC_RenderFillRects(st renderer, st rects, st count, st i3, st...
  function BBC_RenderFlush (line 208) | long long BBC_RenderFlush(st renderer, st i1, st i2, st i3, st i4, st i5...
  function BBC_RenderDrawPoint (line 212) | long long BBC_RenderDrawPoint(st renderer, st x, st y, st i3, st i4, st ...
  function BBC_RenderDrawPoints (line 216) | long long BBC_RenderDrawPoints(st renderer, st points, st count, st i3, ...
  function BBC_RenderClear (line 220) | long long BBC_RenderClear(st renderer, st i1, st i2, st i3, st i4, st i5...
  function BBC_LockTexture (line 224) | long long BBC_LockTexture(st texture, st rect, st pixels, st pitch, st i...
  function BBC_UnlockTexture (line 228) | long long BBC_UnlockTexture(st texture, st i1, st i2, st i3, st i4, st i...
  function BBC_ConvertSurfaceFormat (line 232) | long long BBC_ConvertSurfaceFormat(st surf, st pixel_format, st flgs, st...
  function BBC_ComposeCustomBlendMode (line 236) | long long BBC_ComposeCustomBlendMode(st srcColor, st dstColor, st colorO...
  function BBC_GetDisplayUsableBounds (line 240) | long long BBC_GetDisplayUsableBounds(st displayIndex, st rect, st i2, st...
  function BBC_RenderDrawLine (line 244) | long long BBC_RenderDrawLine(st renderer, st x1, st y1, st x2, st y2, st...
  function BBC_RenderDrawLines (line 248) | long long BBC_RenderDrawLines(st renderer, st points, st count, st i3, s...
  function BBC_RenderGeometry (line 252) | long long BBC_RenderGeometry(st renderer, st texture, st vertices, st nu...
  function WASM_RenderReadPixels (line 257) | long long WASM_RenderReadPixels(st renderer, st rect, st format, st pixe...
  function BBC_CreateRGBSurface (line 261) | long long BBC_CreateRGBSurface(st flgs, st width, st height, st depth, s...
  function BBC_CreateRGBSurfaceFrom (line 265) | long long BBC_CreateRGBSurfaceFrom(st pixels, st width, st height, st de...
  function BBC_CreateRGBSurfaceWithFormat (line 269) | long long BBC_CreateRGBSurfaceWithFormat(st flgs, st width, st height, s...
  function BBC_SetSurfaceAlphaMod (line 273) | long long BBC_SetSurfaceAlphaMod(st surface, st alpha, st i2, st i3, st ...
  function BBC_SetSurfaceColorMod (line 277) | long long BBC_SetSurfaceColorMod(st surface, st r, st g, st b, st i4, st...
  function BBC_SetSurfaceBlendMode (line 281) | long long BBC_SetSurfaceBlendMode(st surface, st blend, st i2, st i3, st...
  function BBC_UpperBlit (line 285) | long long BBC_UpperBlit(st src, st srcrect, st dst, st dstrect, st i4, s...
  function BBC_FillRect (line 289) | long long BBC_FillRect(st surface, st rect, st color, st i3, st i4, st i...
  function BBC_STBIMG_Load (line 293) | long long BBC_STBIMG_Load(st file, st i1, st i2, st i3, st i4, st i5, st...
  function BBC_STBIMG_LoadTexture (line 297) | long long BBC_STBIMG_LoadTexture(st renderer, st file, st i2, st i3, st ...
  function BBC_LoadBMP_RW (line 301) | long long BBC_LoadBMP_RW(st src, st freesrc, st i2, st i3, st i4, st i5,...
  function BBC_SetPaletteColors (line 305) | long long BBC_SetPaletteColors(st palette, st colors, st first, st ncolo...
  function BBC_stbi_set_flip_vertically_on_load (line 309) | long long BBC_stbi_set_flip_vertically_on_load(st flip, st i1, st i2, st...
  function BBC_stbi_load_gif_from_memory (line 313) | long long BBC_stbi_load_gif_from_memory(st buffer, st len, st delays, st...
  function BBC_stbi_image_free (line 318) | long long BBC_stbi_image_free(st buffer, st i1, st i2, st i3, st i4, st ...
  function BBC_GL_BindTexture (line 324) | long long BBC_GL_BindTexture(st texture, st texw, st texh, st i3, st i4,...
  function BBC_GL_CreateContext (line 328) | long long BBC_GL_CreateContext(st window, st i1, st i2, st i3, st i4, st...
  function BBC_GL_DeleteContext (line 332) | long long BBC_GL_DeleteContext(st context, st i1, st i2, st i3, st i4, s...
  function BBC_GL_GetCurrentContext (line 336) | long long BBC_GL_GetCurrentContext(st i0, st i1, st i2, st i3, st i4, st...
  function BBC_GL_GetDrawableSize (line 340) | long long BBC_GL_GetDrawableSize(st window, st pw, st ph, st i3, st i4, ...
  function BBC_GL_MakeCurrent (line 346) | long long BBC_GL_MakeCurrent(st window, st context, st i2, st i3, st i4,...
  function BBC_GL_SetAttribute (line 350) | long long BBC_GL_SetAttribute(st attr, st value, st i2, st i3, st i4, st...
  function BBC_GL_SetSwapInterval (line 354) | long long BBC_GL_SetSwapInterval(st interval, st i1, st i2, st i3, st i4...
  function BBC_GL_SwapWindow (line 358) | long long BBC_GL_SwapWindow(st window, st i1, st i2, st i3, st i4, st i5...
  function BBC_OpenAudioDevice (line 364) | long long BBC_OpenAudioDevice(st device, st iscapture, st desired, st ob...
  function BBC_CloseAudioDevice (line 368) | long long BBC_CloseAudioDevice(st device, st i1, st i2, st i3, st i4, st...
  function BBC_QueueAudio (line 372) | long long BBC_QueueAudio(st device, st data, st len, st i3, st i4, st i5...
  function BBC_ClearQueuedAudio (line 376) | long long BBC_ClearQueuedAudio(st device, st i1, st i2, st i3, st i4, st...
  function BBC_GetQueuedAudioSize (line 380) | long long BBC_GetQueuedAudioSize(st device, st i1, st i2, st i3, st i4, ...
  function BBC_MixAudioFormat (line 384) | long long BBC_MixAudioFormat(st dst, st src, st format, st len, st volum...
  function BBC_LockAudioDevice (line 388) | long long BBC_LockAudioDevice(st device, st i1, st i2, st i3, st i4, st ...
  function BBC_UnlockAudioDevice (line 392) | long long BBC_UnlockAudioDevice(st device, st i1, st i2, st i3, st i4, s...
  function BBC_PauseAudioDevice (line 396) | long long BBC_PauseAudioDevice(st device, st pause, st i2, st i3, st i4,...
  function BBC_drmp3_open_file_and_read_f32 (line 400) | long long BBC_drmp3_open_file_and_read_f32(st path, st config, st total,...
  function BBC_drmp3dec_f32_to_s16 (line 404) | long long BBC_drmp3dec_f32_to_s16(st in, st out, st num, st i3, st i4, s...
  function BBC_drmp3_free (line 408) | long long BBC_drmp3_free(st ptr, st i1, st i2, st i3, st i4, st i5, st i...
  function BBC_LoadWAV_RW (line 412) | long long BBC_LoadWAV_RW(st src, st freesrc, st spec, st audio_buf, st a...
  function BBC_FreeWAV (line 416) | long long BBC_FreeWAV(st audio_buf, st i1, st i2, st i3, st i4, st i5, s...
  function BBC_BuildAudioCVT (line 420) | long long BBC_BuildAudioCVT(st cvt, st src_fmt, st src_chan, st src_rate...
  function BBC_ConvertAudio (line 425) | long long BBC_ConvertAudio(st cvt, st i1, st i2, st i3, st i4, st i5, st...
  function BBC_asctime (line 431) | long long BBC_asctime(st tm, st i1, st i2, st i3, st i4, st i5, st i6, s...
  function BBC_gmtime (line 435) | long long BBC_gmtime(st timep, st i1, st i2, st i3, st i4, st i5, st i6,...
  function BBC_localtime (line 439) | long long BBC_localtime(st timep, st i1, st i2, st i3, st i4, st i5, st ...
  function BBC_mktime (line 443) | long long BBC_mktime(st tm, st i1, st i2, st i3, st i4, st i5, st i6, st...
  function BBC_time (line 447) | long long BBC_time(st tloc, st i1, st i2, st i3, st i4, st i5, st i6, st...
  function BBC_GetTicks (line 451) | long long BBC_GetTicks(st i0, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function BBC_GetTicks64 (line 455) | long long BBC_GetTicks64(st i0, st i1, st i2, st i3, st i4, st i5, st i6...
  function BBC_AddTimer (line 459) | long long BBC_AddTimer(st interval, st callback, st param, st i3, st i4,...
  function BBC_RemoveTimer (line 463) | long long BBC_RemoveTimer(st id, st i1, st i2, st i3, st i4, st i5, st i...
  function BBC_CaptureMouse (line 469) | long long BBC_CaptureMouse(st enabled, st i1, st i2, st i3, st i4, st i5...
  function BBC_CreateColorCursor (line 473) | long long BBC_CreateColorCursor(st surface, st hot_x, st hot_y, st i3, s...
  function BBC_Delay (line 477) | long long BBC_Delay(st ms, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function BBC_GetError (line 481) | long long BBC_GetError(st i0, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function BBC_HasIntersection (line 485) | long long BBC_HasIntersection(st recta, st rectb, st i2, st i3, st i4, s...
  function BBC_IntersectRectAndLine (line 489) | long long BBC_IntersectRectAndLine(st rect, st X1, st Y1, st X2, st Y2, ...
  function BBC_SetCursor (line 493) | long long BBC_SetCursor(st cursor, st i1, st i2, st i3, st i4, st i5, st...
  function BBC_SetHint (line 497) | long long BBC_SetHint(st name, st value, st i2, st i3, st i4, st i5, st ...
  function BBC_GetWindowFlags (line 501) | long long BBC_GetWindowFlags(st window, st i1, st i2, st i3, st i4, st i...
  function BBC_SetWindowFullscreen (line 505) | long long BBC_SetWindowFullscreen(st window, st flag, st i2, st i3, st i...
  function BBC_SetWindowPosition (line 510) | long long BBC_SetWindowPosition(st window, st x, st y, st i3, st i4, st ...
  function BBC_SetWindowResizable (line 514) | long long BBC_SetWindowResizable(st window, st resizable, st i2, st i3, ...
  function BBC_SetWindowSize (line 518) | long long BBC_SetWindowSize(st window, st w, st h, st i3, st i4, st i5, ...
  function BBC_SetWindowTitle (line 522) | long long BBC_SetWindowTitle(st window, st title, st i2, st i3, st i4, s...
  function BBC_RWFromMem (line 526) | long long BBC_RWFromMem(st mem, st size, st i2, st i3, st i4, st i5, st ...
  function BBC_RWFromFile (line 530) | long long BBC_RWFromFile(st file, st mode, st i2, st i3, st i4, st i5, s...
  function BBC_RWread (line 534) | long long BBC_RWread(st context, st ptr, st size, st maxnum, st i4, st i...
  function BBC_RWwrite (line 538) | long long BBC_RWwrite(st context, st ptr, st size, st num, st i4, st i5,...
  function BBC_ShowSimpleMessageBox (line 542) | long long BBC_ShowSimpleMessageBox(st flgs, st title, st message, st win...
  function BBC_GetPerformanceCounter (line 546) | long long BBC_GetPerformanceCounter(st i0, st i1, st i2, st i3, st i4, s...
  function BBC_GetPerformanceFrequency (line 550) | long long BBC_GetPerformanceFrequency(st i0, st i1, st i2, st i3, st i4,...
  function BBC_malloc (line 554) | long long BBC_malloc(st size, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function BBC_free (line 558) | long long BBC_free(st ptr, st i1, st i2, st i3, st i4, st i5, st i6, st i7,
  function BBC_memcpy (line 562) | long long BBC_memcpy(st dest, st src, st n, st i3, st i4, st i5, st i6, ...
  function BBC_memmove (line 566) | long long BBC_memmove(st dest, st src, st n, st i3, st i4, st i5, st i6,...
  function BBC_memset (line 570) | long long BBC_memset(st dest, st c, st n, st i3, st i4, st i5, st i6, st...
  function BBC_TTF_GetFontKerningSizeGlyphs (line 574) | long long BBC_TTF_GetFontKerningSizeGlyphs(st font, st prev_index, st in...
  function BBC_TTF_Linked_Version (line 578) | long long BBC_TTF_Linked_Version(st i0, st i1, st i2, st i3, st i4, st i...
  function BBC_OpenURL (line 582) | long long BBC_OpenURL(st url, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function BBC_Net_AddSocket (line 588) | long long BBC_Net_AddSocket(st set, st sock, st i2, st i3, st i4, st i5,...
  function BBC_Net_AllocSocketSet (line 592) | long long BBC_Net_AllocSocketSet(st maxsockets, st i1, st i2, st i3, st ...
  function BBC_Net_CheckSockets (line 596) | long long BBC_Net_CheckSockets(st set, st timeout, st i2, st i3, st i4, ...
  function BBC_Net_DelSocket (line 600) | long long BBC_Net_DelSocket(st set, st sock, st i2, st i3, st i4, st i5,...
  function BBC_Net_FreeSocketSet (line 604) | long long BBC_Net_FreeSocketSet(st set, st i1, st i2, st i3, st i4, st i...
  function BBC_Net_GetError (line 608) | long long BBC_Net_GetError(st i0, st i1, st i2, st i3, st i4, st i5, st ...
  function BBC_Net_Linked_Version (line 612) | long long BBC_Net_Linked_Version(st i0, st i1, st i2, st i3, st i4, st i...
  function BBC_Net_ResolveHost (line 616) | long long BBC_Net_ResolveHost(st addr, st host, st port, st i3, st i4, s...
  function BBC_Net_ResolveIP (line 620) | long long BBC_Net_ResolveIP(st addr, st i1, st i2, st i3, st i4, st i5, ...
  function BBC_Net_TCP_Accept (line 624) | long long BBC_Net_TCP_Accept(st server, st i1, st i2, st i3, st i4, st i...
  function BBC_Net_TCP_Close (line 628) | long long BBC_Net_TCP_Close(st sock, st i1, st i2, st i3, st i4, st i5, ...
  function BBC_Net_TCP_GetPeerAddress (line 632) | long long BBC_Net_TCP_GetPeerAddress(st sock, st i1, st i2, st i3, st i4...
  function BBC_Net_TCP_Open (line 636) | long long BBC_Net_TCP_Open(st ip, st i1, st i2, st i3, st i4, st i5, st ...
  function BBC_Net_TCP_Recv (line 640) | long long BBC_Net_TCP_Recv(st sock, st data, st maxlen, st i3, st i4, st...
  function BBC_Net_TCP_Send (line 644) | long long BBC_Net_TCP_Send(st sock, st data, st len, st i3, st i4, st i5...
  function wget_report (line 650) | void wget_report(const char *message)
  function BBC_emscripten_async_wget (line 655) | long long BBC_emscripten_async_wget(st url, st file, st i2, st i3, st i4...
  function BBC_emscripten_run_script_string (line 662) | long long BBC_emscripten_run_script_string(st script, st i1, st i2, st i...
  function BBC_glAttachShader (line 974) | long long BBC_glAttachShader(st program, st shader, st i2, st i3, st i4,...
  function BBC_glBindAttribLocation (line 978) | long long BBC_glBindAttribLocation(st program, st index, st name, st i3,...
  function BBC_glBindBuffer (line 982) | long long BBC_glBindBuffer(st target, st buffer, st i2, st i3, st i4, st...
  function BBC_glBlendFunc (line 986) | long long BBC_glBlendFunc(st sfactor, st dfactor, st i2, st i3, st i4, s...
  function BBC_glBufferData (line 990) | long long BBC_glBufferData(st target, st size, st data, st usage, st i4,...
  function BBC_glClear (line 994) | long long BBC_glClear(st mask, st i1, st i2, st i3, st i4, st i5, st i6,...
  function BBC_glClearColor (line 998) | long long BBC_glClearColor(st i0, st i1, st i2, st i3, st i4, st i5, st ...
  function BBC_glClearDepthf (line 1007) | long long BBC_glClearDepthf(st depth, st i1, st i2, st i3, st i4, st i5,...
  function BBC_glCompileShader (line 1011) | long long BBC_glCompileShader(st shader, st i1, st i2, st i3, st i4, st ...
  function BBC_glCreateProgram (line 1015) | long long BBC_glCreateProgram(st i0, st i1, st i2, st i3, st i4, st i5, ...
  function BBC_glCreateShader (line 1019) | long long BBC_glCreateShader(st type, st i1, st i2, st i3, st i4, st i5,...
  function BBC_glCullFace (line 1023) | long long BBC_glCullFace(st mode, st i1, st i2, st i3, st i4, st i5, st ...
  function BBC_glDeleteBuffers (line 1027) | long long BBC_glDeleteBuffers(st num, st buffers, st i2, st i3, st i4, s...
  function BBC_glDeleteProgram (line 1031) | long long BBC_glDeleteProgram(st program, st i1, st i2, st i3, st i4, st...
  function BBC_glDeleteShader (line 1035) | long long BBC_glDeleteShader(st shader, st i1, st i2, st i3, st i4, st i...
  function BBC_glDeleteTextures (line 1039) | long long BBC_glDeleteTextures(st ntex, st textures, st i2, st i3, st i4...
  function BBC_glDisable (line 1043) | long long BBC_glDisable(st cap, st i1, st i2, st i3, st i4, st i5, st i6...
  function BBC_glDisableVertexAttribArray (line 1047) | long long BBC_glDisableVertexAttribArray(st index, st i1, st i2, st i3, ...
  function BBC_glDrawArrays (line 1051) | long long BBC_glDrawArrays(st mode, st first, st count, st i3, st i4, st...
  function BBC_glEnable (line 1055) | long long BBC_glEnable(st cap, st i1, st i2, st i3, st i4, st i5, st i6,...
  function BBC_glEnableVertexAttribArray (line 1059) | long long BBC_glEnableVertexAttribArray(st index, st i1, st i2, st i3, s...
  function BBC_glFinish (line 1063) | long long BBC_glFinish(st i0, st i1, st i2, st i3, st i4, st i5, st i6, ...
  function BBC_glGenBuffers (line 1067) | long long BBC_glGenBuffers(st num, st buffers, st i2, st i3, st i4, st i...
  function BBC_glGetAttribLocation (line 1071) | long long BBC_glGetAttribLocation(st program, st name, st i2, st i3, st ...
  function BBC_glGetIntegerv (line 1075) | long long BBC_glGetIntegerv(st pname, st data, st i2, st i3, st i4, st i...
  function BBC_glGetProgramInfoLog (line 1079) | long long BBC_glGetProgramInfoLog(st program, st maxLength, st length, s...
  function BBC_glGetProgramiv (line 1083) | long long BBC_glGetProgramiv(st program, st pname, st params, st i3, st ...
  function BBC_glGetShaderInfoLog (line 1087) | long long BBC_glGetShaderInfoLog(st shader, st maxLength, st length, st ...
  function BBC_glGetShaderiv (line 1091) | long long BBC_glGetShaderiv(st shader, st pname, st params, st i3, st i4...
  function BBC_glGetUniformLocation (line 1095) | long long BBC_glGetUniformLocation(st program, st name, st i2, st i3, st...
  function BBC_glIsBuffer (line 1099) | long long BBC_glIsBuffer(st buffer, st i1, st i2, st i3, st i4, st i5, s...
  function BBC_glIsTexture (line 1103) | long long BBC_glIsTexture(st texture, st i1, st i2, st i3, st i4, st i5,...
  function BBC_glLinkProgram (line 1107) | long long BBC_glLinkProgram(st program, st i1, st i2, st i3, st i4, st i...
  function BBC_glReadPixels (line 1111) | long long BBC_glReadPixels(st x, st y, st width, st height, st format, s...
  function BBC_glShaderSource (line 1115) | long long BBC_glShaderSource(st shader, st count, st string, st length, ...
  function BBC_glUniform1fv (line 1119) | long long BBC_glUniform1fv(st location, st count, st value, st i3, st i4...
  function BBC_glUniform2fv (line 1123) | long long BBC_glUniform2fv(st location, st count, st value, st i3, st i4...
  function BBC_glUniform3fv (line 1127) | long long BBC_glUniform3fv(st location, st count, st value, st i3, st i4...
  function BBC_glUniform4fv (line 1131) | long long BBC_glUniform4fv(st location, st count, st value, st i3, st i4...
  function BBC_glUniformMatrix4fv (line 1135) | long long BBC_glUniformMatrix4fv(st location, st count, st transpose, st...
  function BBC_glUseProgram (line 1139) | long long BBC_glUseProgram(st program, st i1, st i2, st i3, st i4, st i5...
  function BBC_glVertexAttribPointer (line 1143) | long long BBC_glVertexAttribPointer(st index, st size, st type, st norma...
  function BBC_glViewport (line 1147) | long long BBC_glViewport(st x, st y, st w, st h, st i4, st i5, st i6, st...
  function BBC_glScissor (line 1151) | long long BBC_glScissor(st x, st y, st w, st h, st i4, st i5, st i6, st i7,
  function BBC_glActiveTexture (line 1155) | long long BBC_glActiveTexture(st texture, st i1, st i2, st i3, st i4, st...
  function BBC_glBindTexture (line 1159) | long long BBC_glBindTexture(st target, st texture, st i2, st i3, st i4, ...
  function BBC_glGenTextures (line 1163) | long long BBC_glGenTextures(st ntex, st textures, st i2, st i3, st i4, s...
  function BBC_glTexImage2D (line 1167) | long long BBC_glTexImage2D(st target, st level, st internalformat, st wi...
  function BBC_glTexParameteri (line 1171) | long long BBC_glTexParameteri(st target, st pname, st param, st i3, st i...
  function BBC_glUniform1i (line 1175) | long long BBC_glUniform1i(st location, st v0, st i2, st i3, st i4, st i5...
  function BBC_glBindFramebuffer (line 1179) | long long BBC_glBindFramebuffer(st target, st fbo, st i2, st i3, st i4, ...
  function BBC_glGenFramebuffers (line 1183) | long long BBC_glGenFramebuffers(st num, st framebuffers, st i2, st i3, s...
  function BBC_glFramebufferTexture2D (line 1187) | long long BBC_glFramebufferTexture2D(st target, st attach, st textarget,...
  function BBC_glDeleteFramebuffers (line 1191) | long long BBC_glDeleteFramebuffers(st num, st framebuffers, st i2, st i3...
  function BBC_GL_GetProcAddress (line 1309) | long long BBC_GL_GetProcAddress(st symbol, st i1, st i2, st i3, st i4, s...

FILE: src/bbasmb_x86_64.c
  function cmps (line 1238) | static int cmps (int n, char *p, char *q)
  function scan (line 1247) | static int scan (char **arr, int num)
  function schop (line 1264) | static int schop (char **arr, int num)
  function nchop (line 1286) | static int nchop (unsigned char *arr, unsigned int v, int num)
  function tabit (line 1318) | static void tabit (int x)
  function sibeval (line 1350) | static long long sibeval(int type, int *pdis)
  function operand (line 1411) | static int operand (int *pdis, long long *pimm, int *povr, long long *psib)
  function lookup (line 1502) | static int lookup (int mnemonic, int operand1, int operand2, int operand3)
  function assemble (line 2074) | void assemble (void)

FILE: src/bbccli.c
  function BBC_RWclose (line 65) | static int BBC_RWclose (struct SDL_RWops* context)
  function parse (line 130) | static int parse (char *dst, char *src, char term)
  function onoff (line 162) | static int onoff (char *p)
  function wild (line 173) | static int wild (char *ebx, char *edx)
  function oscli (line 229) | void oscli (char *cmd)

FILE: src/bbccon.c
  type timer_t (line 27) | typedef int timer_t ;
  type dispatch_source_t (line 59) | typedef dispatch_source_t timer_t ;
  function gfxPrimitivesSetFont (line 126) | void gfxPrimitivesSetFont(void) { }
  function gfxPrimitivesGetFont (line 127) | void gfxPrimitivesGetFont(void) { }
  function RedefineChar (line 128) | void RedefineChar(void) { }
  function putinp (line 135) | static int putinp (unsigned char inp)
  function getinp (line 149) | static int getinp (unsigned char *pinp)
  function DWORD (line 177) | static DWORD WINAPI myThread (void *parm)
  function putevt (line 238) | int putevt (heapptr handler, int msg, int wparam, int lparam)
  function heapptr (line 254) | static heapptr getevt (void)
  function putkey (line 274) | static int putkey (char key)
  function getkey (line 293) | int getkey (unsigned char *pkey)
  function GetTicks (line 306) | unsigned int GetTicks (void)
  function kbchk (line 318) | static int kbchk (void)
  function kbget (line 323) | static unsigned char kbget (void)
  function kwait (line 330) | static int kwait (unsigned int timeout)
  function stdin_handler (line 341) | int stdin_handler (int *px, int *py)
  function getcsr (line 421) | void getcsr(int *px, int *py)
  function sound (line 431) | void sound (short chan, signed char ampl, unsigned char pitch, unsigned ...
  function envel (line 436) | void envel (signed char *env)
  function quiet (line 441) | void quiet (void)
  function vtint (line 446) | int vtint (int x, int y)
  function getmodeno (line 453) | int getmodeno (void)
  function vpoint (line 459) | int vpoint (int x, int y)
  function vgetc (line 465) | int vgetc (int x, int y)
  function osbyte (line 471) | int osbyte (int al, int xy)
  function osword (line 477) | void osword (int al, void *xy)
  function widths (line 484) | int widths (unsigned char *s, int l)
  function adval (line 491) | int adval (int n)
  function apicall_ (line 501) | long long apicall_ (long long (*APIfunc) (size_t, size_t, size_t, size_t...
  function fltcall_ (line 509) | double fltcall_ (double (*APIfunc) (size_t, size_t, size_t, size_t, size...
  function apicall_ (line 519) | long long apicall_ (long long (*APIfunc) (size_t, size_t, size_t, size_t...
  function fltcall_ (line 549) | double fltcall_ (double (*APIfunc) (size_t, size_t, size_t, size_t, size...
  function guicall (line 583) | size_t guicall (void *func, PARM *parm)
  function trap (line 589) | void trap (void)
  function heapptr (line 610) | heapptr xtrap (void)
  function faterr (line 619) | void faterr (const char *msg)
  function rdkey (line 625) | static int rdkey (unsigned char *pkey)
  function oskey (line 664) | int oskey (int wait)
  function osrdch (line 688) | unsigned char osrdch (void)
  function oswrch (line 711) | void oswrch (unsigned char vdu)
  function reset (line 791) | void reset (void)
  function osline (line 800) | void osline (char *buffer)
  function getime (line 1003) | int getime (void)
  function getims (line 1012) | int getims (void)
  function putime (line 1031) | void putime (int n)
  function oswait (line 1039) | void oswait (int cs)
  function mouse (line 1058) | void mouse (int *px, int *py, int *pb)
  function mouseon (line 1066) | void mouseon (int type)
  function mouseoff (line 1071) | void mouseoff (void)
  function mouseto (line 1076) | void mouseto (int x, int y)
  function oscall (line 1090) | int oscall (int addr)
  function heapptr (line 1132) | heapptr oshwm (void *addr, int settop)
  function FILE (line 1154) | static FILE *lookup (void *chan)
  function osload (line 1169) | void osload (char *p, void *addr, unsigned int max)
  function ossave (line 1185) | void ossave (char *p, void *addr, unsigned int len)
  function readb (line 1247) | static void readb (FILE *context, unsigned char *buffer, FCB *pfcb)
  function writeb (line 1271) | static int writeb (FILE *context, unsigned char *buffer, FCB *pfcb)
  function closeb (line 1297) | static int closeb (void *chan)
  function osbget (line 1316) | unsigned char osbget (void *chan, int *peof)
  function osbput (line 1357) | void osbput (void *chan, unsigned char byte)
  function getptr (line 1391) | long long getptr (void *chan)
  function setptr (line 1413) | void setptr (void *chan, long long ptr)
  function getext (line 1430) | long long getext (void *chan)
  function setext (line 1461) | void setext (void *chan, long long ptr)
  function geteof (line 1467) | long long geteof (void *chan)
  function osshut (line 1479) | void osshut (void *chan)
  function entry (line 1496) | int entry (void *immediate)
  function UserTimerProc (line 1535) | static void UserTimerProc (UINT uUserTimerID, UINT uMsg, void *dwUser, v...
  function timer_t (line 1543) | timer_t StartTimer (int period)
  function StopTimer (line 1548) | void StopTimer (timer_t timerid)
  function SystemIO (line 1553) | void SystemIO (int flag)
  function UserTimerProc (line 1561) | static void UserTimerProc (int sig, siginfo_t *si, void *uc)
  function timer_t (line 1568) | timer_t StartTimer (int period)
  function StopTimer (line 1594) | void StopTimer (timer_t timerid)
  function SystemIO (line 1599) | void SystemIO (int flag)
  function UserTimerProc (line 1618) | static void UserTimerProc (dispatch_source_t timerid)
  function timer_t (line 1625) | timer_t StartTimer (int period)
  function StopTimer (line 1640) | void StopTimer (timer_t timerid)
  function SystemIO (line 1645) | void SystemIO (int flag)
  function SetLoadDir (line 1663) | static void SetLoadDir (char *path)
  function main (line 1687) | int main (int argc, char* argv[])

FILE: src/bbccos.c
  type timer_t (line 29) | typedef int timer_t ;
  type dispatch_source_t (line 37) | typedef dispatch_source_t timer_t ;
  type __attribute__ (line 61) | typedef __attribute__((aligned(1)))
  type variant (line 63) | typedef long double variant ;
  type __attribute__ (line 66) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 67) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 68) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 69) | typedef __attribute__((aligned(1)))
  type __attribute__ (line 70) | typedef __attribute__((aligned(1)))
  type STR (line 72) | typedef struct tagSTR
  function newmode (line 129) | static void newmode (short wx, short wy, short cx, short cy, short nc, s...
  function modechg (line 150) | static void modechg (char al)
  function defchr (line 166) | static void defchr (unsigned char n, unsigned char a, unsigned char b,
  function newline (line 193) | static void newline (int *px, int *py)
  function xeqvdu (line 231) | void xeqvdu (int code, int data1, int data2)
  function parse (line 507) | static int parse (char *dst, char *src, char term)
  function onoff (line 539) | static int onoff (char *p)
  function wild (line 550) | static int wild (char *ebx, char *edx)
  function oscli (line 606) | void oscli (char *cmd)
  function compare (line 1209) | static int compare (void *src, void *dst, unsigned char type)
  function shellsort (line 1273) | static void shellsort (int dir, int ecx, void* ebp)
  function sortup (line 1347) | void sortup (int eax, int ebx, int ecx, unsigned int edx, unsigned int e...
  function sortdn (line 1349) | void sortdn (int eax, int ebx, int ecx, unsigned int edx, unsigned int e...
  function hook (line 1351) | void hook(void){}

FILE: src/bbcmos.c
  function sortup (line 48) | void sortup(void){}
  function sortdn (line 49) | void sortdn(void){}
  function reset (line 895) | void reset (void)
  function BBC_PushEvent (line 908) | static int BBC_PushEvent(SDL_Event* event)
  function pushev (line 922) | void pushev (int code, void *data1, void *data2)
  function BBC_RWclose (line 941) | static int BBC_RWclose (struct SDL_RWops* context)
  function waitev (line 949) | size_t waitev (void)
  function putevt (line 956) | int putevt (heapptr handler, int msg, int wparam, int lparam)
  function heapptr (line 972) | static heapptr getevt (void)
  function putkey (line 992) | int putkey (char key)
  function getkey (line 1006) | static int getkey (unsigned char *pkey)
  function getcsr (line 1020) | void getcsr(int *px, int *py)
  function vtint (line 1032) | int vtint (int x, int y)
  function getmodeno (line 1039) | int getmodeno (void)
  function vpoint (line 1045) | int vpoint (int x, int y)
  function vgetc (line 1076) | int vgetc (int x, int y)
  function oskon (line 1101) | static void oskon (void)
  function rdkey (line 1110) | static int rdkey (unsigned char *pkey)
  function trap (line 1152) | void trap (void)
  function heapptr (line 1173) | heapptr xtrap (void)
  function faterr (line 1204) | void faterr (const char *msg)
  function oskey (line 1217) | int oskey (int wait)
  function osrdch (line 1254) | unsigned char osrdch (void)
  function oswrch (line 1279) | void oswrch (unsigned char vdu)
  function copykey (line 1361) | static unsigned char copykey (int *cc, int key)
  function osline (line 1368) | void osline (char *buffer)
  function getime (line 1554) | int getime (void)
  function getims (line 1563) | int getims (void)
  function putime (line 1582) | void putime (int n)
  function oswait (line 1590) | void oswait (int cs)
  function mouse (line 1609) | void mouse (int *px, int *py, int *pb)
  function mouseon (line 1616) | void mouseon (int type)
  function mouseoff (line 1632) | void mouseoff (void)
  function mouseto (line 1641) | void mouseto (int x, int y)
  function guicall (line 1661) | size_t guicall (void *func, PARM *parm)
  function osbyte (line 1667) | int osbyte (int al, int xy)
  function osword (line 1674) | void osword (int al, void *xy)
  function oscall (line 1688) | int oscall (int addr)
  function widths (line 1730) | int widths (unsigned char *s, int l)
  function heapptr (line 1755) | heapptr oshwm (void *addr, int settop)
  function adval (line 1762) | int adval (int n)
  function envel (line 1795) | void envel (signed char *env)
  function sound (line 1805) | void sound (short chan, signed char ampl, unsigned char pitch, unsigned ...
  function quiet (line 1840) | void quiet (void)
  function note (line 1854) | static unsigned char note (unsigned char mask)
  function tone (line 1914) | static void tone (short **pbuffer)
  function stick (line 2102) | void stick (short* buffer)
  function SDL_RWops (line 2114) | static SDL_RWops *lookup (void *chan)
  function osload (line 2129) | void osload (char *p, void *addr, unsigned int max)
  function ossave (line 2145) | void ossave (char *p, void *addr, unsigned int len)
  function readb (line 2207) | static void readb (SDL_RWops *context, unsigned char *buffer, FCB *pfcb)
  function writeb (line 2224) | static int writeb (SDL_RWops *context, unsigned char *buffer, FCB *pfcb)
  function closeb (line 2244) | static int closeb (void *chan)
  function osbget (line 2263) | unsigned char osbget (void *chan, int *peof)
  function osbput (line 2304) | void osbput (void *chan, unsigned char byte)
  function getptr (line 2338) | long long getptr (void *chan)
  function setptr (line 2359) | void setptr (void *chan, long long ptr)
  function getext (line 2376) | long long getext (void *chan)
  function setext (line 2405) | void setext (void *chan, long long ptr)
  function geteof (line 2411) | long long geteof (void *chan)
  function osshut (line 2423) | void osshut (void *chan)
  function entry (line 2440) | int entry (void *immediate)

FILE: src/bbcsdl.c
  function SetErrorBBC (line 177) | void SetErrorBBC (void) { SDL_SetError ("OS error %i", errno) ; }
  function EM_BOOL (line 192) | static EM_BOOL Emscripten_HandleFullscreenChange(int eventType,
  function BBC_PushEvent (line 256) | static int BBC_PushEvent(SDL_Event* event)
  function Uint32 (line 269) | static Uint32 BlinkTimerCallback(Uint32 interval, void *param)
  function Uint32 (line 295) | Uint32 UserTimerCallback(Uint32 interval, void *param)
  function Uint32 (line 311) | static Uint32 PollTimerCallback(Uint32 interval, void *param)
  function UserAudioCallback (line 321) | static void UserAudioCallback(void* userdata, Uint8* stream, int len)
  function SDL_Texture (line 361) | SDL_Texture *MakeBackButton(SDL_Renderer *renderer)
  function Uint32 (line 391) | static Uint32 FlipCaret(SDL_Renderer *renderer, SDL_Rect *rect)
  function CaptureScreen (line 409) | static void CaptureScreen (void)
  function SetDir (line 438) | static void SetDir (char *newpath)
  function ShutDown (line 465) | static void ShutDown (void)
  function BBC_PeepEvents (line 499) | static int BBC_PeepEvents(SDL_Event* ev, int nev, SDL_eventaction action...
  function myEventFilter (line 512) | static int myEventFilter(void* userdata, SDL_Event* pev)
  function mainloop (line 548) | void mainloop (void)
  function main (line 553) | int main(int argc, char* argv[])
  function maintick (line 1090) | static int maintick (void)

FILE: src/bbcvdu.c
  function BBC_RenderSetClipRect (line 216) | static int BBC_RenderSetClipRect (SDL_Renderer* renderer, SDL_Rect* rect)
  function BBC_RenderReadPixels (line 234) | int BBC_RenderReadPixels (SDL_Renderer* renderer, const SDL_Rect* rect,
  function rgbsra7 (line 256) | static unsigned int rgbsra7 (unsigned int rgb)
  function setcol (line 266) | static void setcol (unsigned char ci)
  function grawin (line 274) | static void grawin (int *l, int *r, int *t, int *b)
  function ascale (line 293) | static void ascale (int *x, int *y)
  function radius (line 300) | static int radius (int cx, int cy, int rx, int ry)
  function arctan (line 306) | static int arctan (int dx, int dy)
  function blit (line 363) | static void blit (int dstx, int dsty, int srcx, int srcy, int w, int h, ...
  function flooda (line 398) | static void flooda (unsigned char col, unsigned char tar, int cx, int cy...
  function floodb (line 421) | static void floodb (unsigned char col, unsigned char tar, int cx, int cy...
  function gcsr (line 449) | static int gcsr (void)
  function p2c (line 455) | static void p2c (int x, int y, short **pc, short **sl, int *nc, int *oc)
  function xy2p (line 465) | static int xy2p (int *x, int *y)
  function blob (line 494) | static void blob (void)
  function swap (line 517) | static void swap (int *xy)
  function cls (line 528) | static void cls (void)
  function scroll (line 568) | static void scroll (char al, char ah)
  function scrolp (line 692) | static int scrolp (char al, char ah)
  function psend (line 706) | static void psend (char al)
  function cmove (line 730) | static void cmove (unsigned char al, int dx, int dy, int *px, int *py, i...
  function mcsr (line 883) | static void mcsr (char code)
  function getch (line 888) | static short getch (int x, int y)
  function charttf (line 920) | void charttf(unsigned short ax, int col, SDL_Rect rect)
  function charout (line 939) | static void charout(unsigned short ax, unsigned char fg, unsigned char bg,
  function charout_logic (line 962) | static void charout_logic (short ax, short fg, int cx, int cy, int dx)
  function vmove (line 1023) | static void vmove (char code, int dx, int dy)
  function fmove (line 1038) | static void fmove (char code)
  function unpend (line 1044) | static void unpend (void)
  function home (line 1052) | static void home (void)
  function send (line 1059) | static void send (short ch)
  function sendg (line 1099) | static void sendg (short ch)
  function vducurs (line 1150) | static void vducurs (void)
  function iniwin (line 1157) | static void iniwin (void)
  function minit (line 1175) | static void minit (signed char bc)
  function gcol (line 1207) | static void gcol (char al, signed char ah)
  function rescol (line 1217) | static void rescol (void)
  function newmode (line 1242) | static void newmode (short wx, short wy, short cx, short cy, short nc, s...
  function vduinit (line 1306) | static void vduinit (void)
  function qmove (line 1335) | static void qmove (char code)
  function plotns (line 1384) | static void plotns (unsigned char al, int cx, int cy)
  function plot (line 1662) | static void plot (unsigned char code, short xs, short ys)
  function clg (line 1694) | static void clg (void)
  function colour (line 1746) | static void colour (signed char al)
  function setpal (line 1758) | static void setpal (unsigned char n, signed char m, unsigned char r, uns...
  function modechg (line 1779) | static void modechg (char al)
  function defchr (line 1804) | static void defchr (unsigned char n, unsigned char a, unsigned char b,
  function gwind (line 1901) | static void gwind (short sl, short sb, short sr, short st)
  function reswin (line 1918) | static void reswin (void)
  function twind (line 1941) | static void twind (unsigned char lx, unsigned char by, unsigned char rx,...
  function origin (line 1962) | static void origin (short x, short y)
  function tabxy (line 1970) | static void tabxy(unsigned char x, unsigned char y)
  function xeqvdu_ (line 1999) | void xeqvdu_ (int data2, int data1, int code)
  function getchar_ (line 2159) | int getchar_ (int x, int y)
  function vtint_ (line 2169) | int vtint_ (int x, int y)
  function getcsr_ (line 2189) | int getcsr_ (void)
  function getwid_ (line 2206) | int getwid_ (int l, char *s)
  function TTF_Font (line 2218) | TTF_Font *openfont_ (char *filename, int sizestyle)
  function copkey_ (line 2267) | int copkey_ (int *xy, int al)
  function vduchr_ (line 2340) | void vduchr_ (short ucs2)
  function apicall_ (line 2373) | long long apicall_ (long long (*APIfunc) (size_t, size_t, size_t, size_t...
  function fltcall_ (line 2381) | double fltcall_ (double (*APIfunc) (size_t, size_t, size_t, size_t, size...
  function apicall_ (line 2391) | long long apicall_ (long long (*APIfunc) (size_t, size_t, size_t, size_t...
  function fltcall_ (line 2426) | double fltcall_ (double (*APIfunc) (size_t, size_t, size_t, size_t, size...
  function disply_ (line 2465) | int disply_ (SDL_Rect *dst, SDL_Surface *surf)
  function getpix_ (line 2497) | void getpix_ (SDL_Rect *src, void *buffer)

FILE: src/bbcvtx.c
  function anydh (line 90) | static int anydh (short *sl)
  function find7 (line 99) | static int find7 (short *sl)
  function setrgb (line 113) | static void setrgb (char al)
  function chout7 (line 138) | static void chout7 (unsigned char al, unsigned char ah, int xpos, int ypos)
  function outch7 (line 203) | static void outch7 (unsigned char al, unsigned char ah, unsigned char mo...
  function char7 (line 254) | static short char7 (short *pc, unsigned char *pattr, unsigned char *pmod...
  function next7 (line 359) | static void next7 (short *sl, int ypos, unsigned char *pattr,  unsigned ...
  function row7 (line 374) | static void row7 (short *pc, short *sl, int ypos, unsigned char *pattr, ...
  function send7 (line 412) | void send7 (unsigned char al, short *pc, short *sl, int ypos)
  function update7 (line 465) | static void update7 (unsigned char flag)
  function flip7 (line 496) | void flip7 (void)
  function page7 (line 506) | void page7 (void)

FILE: src/bbdata_wasm32.c
  type VAR (line 17) | typedef union tagVAR
  type STR (line 39) | typedef struct tagSTR
  type FCB (line 45) | typedef struct tagFCB
  type node (line 54) | struct node
  type node (line 59) | typedef struct node node ;
  type st (line 62) | typedef size_t st ;
  type db (line 63) | typedef double db ;
  type timerparam (line 64) | typedef struct {char *handler; char *proc; unsigned char *flags; } timer...
  function BBC_putevt (line 145) | long long BBC_putevt(st handler, st msg, st wparam, st lparam, st i4, st...
  function GFX_GetFont (line 149) | long long GFX_GetFont(st i0, st i1, st i2, st i3, st i4, st i5, st i6, s...
  function GFX_SetFont (line 153) | long long GFX_SetFont(st fontdata, st cw, st ch, st i3, st i4, st i5, st...
  function GFX_DefChar (line 157) | long long GFX_DefChar(st renderer, st c, st charpos, st width, st height...

FILE: src/bbeval.c
  function setfpu (line 103) | static void setfpu(void) {}
  function setfpu (line 107) | static void setfpu(void) { unsigned int mode = 0x37F; asm ("fldcw %0" : ...
  function str (line 127) | int str (VAR v, char *dst, int format)
  function strhex (line 183) | int strhex (VAR v, char *dst, int field)
  function xpow10 (line 223) | static long double xpow10 (long double n, int p)
  function number (line 257) | static unsigned long long number (int *pcount, int *ptrunc)
  function VAR (line 277) | VAR con (void)
  function VAR (line 339) | VAR cons (void)
  function VAR (line 364) | VAR loadn (void *ptr, unsigned char type)
  function VAR (line 456) | VAR loads (void *ptr, unsigned char type)
  function loadi (line 500) | long long loadi (void *ptr, unsigned char type)
  function xfix (line 513) | void xfix (VAR *px)
  function fix2 (line 525) | static void fix2 (VAR *px, VAR *py)
  function xfloat (line 545) | void xfloat (VAR *px)
  function float2 (line 554) | static void float2 (VAR *px, VAR *py)
  function rnd (line 569) | unsigned int rnd (void)
  function VAR (line 581) | VAR math (VAR x, signed char op, VAR y)
  function VAR (line 860) | VAR val (void)
  function VAR (line 886) | VAR items (void)
  function VAR (line 894) | static VAR itemn (void)
  function VAR (line 902) | static VAR itemf (void)
  function itemi (line 915) | long long itemi (void)
  function VAR (line 930) | VAR exprs (void)
  function VAR (line 938) | VAR exprn (void)
  function expri (line 946) | long long expri (void)
  function dimfunc (line 969) | static int dimfunc (void)
  function nestedFN (line 1049) | void __attribute__ ((noinline)) nestedFN(void)
  function nestedUSR (line 1083) | void __attribute__ ((noinline)) nestedUSR(void)
  function nestedPTR (line 1147) | void __attribute__ ((noinline)) nestedPTR(void)
  function nestedGETS (line 1332) | void __attribute__ ((noinline)) nestedGETS(void)
  function nestedTINT (line 1447) | void __attribute__ ((noinline)) nestedTINT(void)
  function nestedPOINT (line 1468) | void __attribute__ ((noinline)) nestedPOINT(void)
  function nestedLOG (line 1613) | void __attribute__ ((noinline)) nestedLOG(void)
  function nestedMOD (line 1645) | void __attribute__ ((noinline)) nestedMOD(void)
  function nestedSUM (line 1705) | void __attribute__ ((noinline)) nestedSUM(void)
  function nestedEVAL (line 1898) | void __attribute__ ((noinline)) nestedEVAL(void)
  function nestedMID (line 1951) | void __attribute__ ((noinline)) nestedMID(void)
  function nestedLEFT (line 2002) | void __attribute__ ((noinline)) nestedLEFT(void)
  function nestedRIGHT (line 2040) | void __attribute__ ((noinline)) nestedRIGHT(void)
  function nestedSTRING (line 2081) | void __attribute__ ((noinline)) nestedSTRING(void)
  function nestedINSTR (line 2113) | void __attribute__ ((noinline)) nestedINSTR(void)
  function nestedADDR (line 2278) | void __attribute__ ((noinline)) nestedADDR(void)
  function VAR (line 2296) | VAR __attribute__ ((noinline)) nesteddefault(void)
  function relop (line 2378) | static signed char relop (void)
  function VAR (line 2411) | static VAR expr5 (void)
  function VAR (line 2435) | static VAR expr4 (void)
  function VAR (line 2458) | static VAR expr3 (void)
  function VAR (line 2505) | static VAR expr2 (void)
  function VAR (line 2566) | static VAR expr1 (void)
  function VAR (line 2589) | VAR expr (void)
  function expra (line 2612) | int expra (void *ebp, int ecx, unsigned char type)
  function str00 (line 2880) | int str00 (VAR v, char *dst, int format)

FILE: src/bbexec.c
  function spaces (line 105) | void spaces (int num)
  function dotab (line 111) | static void dotab (void)
  function format (line 133) | static int format (signed char al)
  function ptext (line 152) | static void ptext (char *p, int l)
  function equals (line 159) | static void equals (void)
  function storen (line 167) | void storen (VAR v, void *ptr, unsigned char type)
  function stores (line 273) | void stores (VAR v, void *ptr, unsigned char type)
  function modify (line 308) | void modify (VAR v, void *ptr, unsigned char type, signed char op)
  function modifs (line 319) | void modifs (VAR v, void *ptr, unsigned char type, signed char op)
  function assign (line 340) | static void assign (void *ptr, unsigned char type)
  function assigns (line 356) | static void assigns (void *ptr, unsigned char type)
  function termq (line 371) | static int termq (void)
  function quote (line 378) | static void quote (void)
  function skip (line 389) | static void skip (void)
  function wsurch (line 401) | static void wsurch (signed char token, signed char nest, int level)
  function fetchs (line 455) | static int fetchs (char **psrc)
  function isloc (line 480) | static void isloc (void)
  function plot (line 489) | static void plot (int n, int x, int y)
  function undims (line 544) | static void undims (void *ebp, void *ebx)
  function undim (line 586) | static void undim (void)
  function savloc (line 629) | static void savloc (void *ptr, unsigned char type)
  function resloc (line 672) | static void resloc (void)
  function unstack (line 727) | static void unstack (int count)
  function unret (line 764) | static void unret (void)
  function fixup (line 972) | static void fixup (void *edi, intptr_t ebx)
  function structure (line 996) | static int structure (void **pedi)
  function defscan (line 1091) | static void defscan (signed char *edx)
  function procfn (line 1121) | void procfn (signed char flag)
  function newlin (line 1230) | void newlin (void)
  function nestedLOCAL (line 1458) | void __attribute__ ((noinline)) nestedLOCAL(void)
  function nestedPRIVATE (line 1499) | void __attribute__ ((noinline)) nestedPRIVATE(void)
  function nestedRESTOR (line 1639) | void __attribute__ ((noinline)) nestedRESTOR(void)
  function nestedINSTALL (line 1780) | void __attribute__ ((noinline)) nestedINSTALL(void)
  function nestedBPUT (line 1884) | void __attribute__ ((noinline)) nestedBPUT(void)
  function nestedPTR (line 1916) | void __attribute__ ((noinline)) nestedPTR(void)
  function nestedREAD (line 2044) | void __attribute__ ((noinline)) nestedREAD(void)
  function nestedINPUT (line 2112) | void __attribute__ ((noinline)) nestedINPUT(void)
  function nestedPRINT (line 2247) | void __attribute__ ((noinline)) nestedPRINT(void)
  function nestedERROR (line 2359) | void __attribute__ ((noinline)) nestedERROR(void)
  function nestedCOLOUR (line 2432) | void __attribute__ ((noinline)) nestedCOLOUR(void)
  function nestedLINE (line 2543) | void __attribute__ ((noinline)) nestedLINE(void)
  function nestedCIRCLE (line 2611) | void __attribute__ ((noinline)) nestedCIRCLE(void)
  function nestedELLIPSE (line 2635) | void __attribute__ ((noinline)) nestedELLIPSE(void)
  function nestedRECT (line 2662) | void __attribute__ ((noinline)) nestedRECT(void)
  function nestedON (line 2765) | void __attribute__ ((noinline)) nestedON(void)
  function nestedFOR (line 2910) | void __attribute__ ((noinline)) nestedFOR(void)
  function nestedNEXT (line 2968) | void __attribute__ ((noinline)) nestedNEXT(void)
  function nestedEXIT (line 3187) | void __attribute__ ((noinline)) nestedEXIT(void)
  function nestedSWAP (line 3273) | void __attribute__ ((noinline)) nestedSWAP(void)
  function nestedCASE (line 3323) | void __attribute__ ((noinline)) nestedCASE(void)
  function nestedMOUSE (line 3435) | void __attribute__ ((noinline)) nestedMOUSE(void)
  function nestedSYS (line 3498) | void __attribute__ ((noinline)) nestedSYS(void)
  function nestedSOUND (line 3632) | void __attribute__ ((noinline)) nestedSOUND(void)
  function nestedENVEL (line 3659) | void __attribute__ ((noinline)) nestedENVEL(void)
  function nestedDIM (line 3679) | void __attribute__ ((noinline)) nestedDIM(void)
  function nestedSLICE (line 4048) | void __attribute__ ((noinline)) nestedSLICE(void)
  function nestedLET (line 4132) | void __attribute__ ((noinline)) nestedLET(void)

FILE: src/bbmain.c
  function range0 (line 293) | int range0 (char c)
  function range1 (line 304) | int range1 (char c)
  function range2 (line 313) | int range2 (char c)
  function error (line 325) | void error (int code, const char * msg)
  function nxt (line 346) | signed char nxt (void)
  function tokit (line 389) | static signed char tokit (char **pesi, const signed char *ebx)
  function outchr (line 488) | void outchr (unsigned char al)
  function token (line 501) | void token (signed char al)
  function crlf (line 515) | void crlf (void)
  function text (line 523) | void text (const char *txt)
  function listline (line 530) | void listline (signed char *p, int *pindent)
  function clear (line 631) | void clear (void)
  function setlin (line 679) | unsigned short setlin (signed char *edx, char **pebp)
  function clrtrp (line 716) | void clrtrp (void)
  function report (line 731) | unsigned short report (void)
  function fixs (line 845) | void fixs (VAR v)
  function heapptr (line 854) | heapptr *pushs (VAR v)
  function check (line 865) | void check (void)
  function comma (line 871) | void comma (void)
  function braket (line 878) | void braket (void)
  function arrlen (line 886) | int arrlen (void **pebx)
  function getsub (line 906) | static unsigned int getsub (void **pebx, unsigned char *ptype)
  function getsbs (line 973) | static unsigned int getsbs (void *ebx, unsigned char *ptype)
  function getype (line 1189) | static unsigned char getype (char *ptr)
  function lrange (line 1472) | static void lrange (char *ptr, unsigned short *plo, unsigned short *phi)
  function fixup (line 1496) | static void fixup (signed char *ptr, int nlines, unsigned short start, u...
  function basic (line 1530) | int basic (void *ecx, void *edx, void *prompt)

FILE: src/flood.c
  type HLINE_NODE (line 51) | typedef struct hlineNode
  function FreeList (line 70) | static void FreeList(void)
  function PushLine (line 96) | static void PushLine(int x1, int x2, int y, int dy)
  function PopLine (line 151) | static void PopLine(int *x1, int *x2, int *y, int *dy)
  function PushVisitedLine (line 207) | static void PushVisitedLine(int x1, int x2, int y)
  function IsRevisit (line 223) | static int IsRevisit(int x1,int x2,int y)
  function HLINE_NODE (line 239) | static HLINE_NODE* FindNextLine(int x1,int x2,int y)
  function PopThis (line 261) | static void PopThis(HLINE_NODE *pThis)
  function PushOpposite (line 327) | static void PushOpposite(int OldX1,int OldX2,int x1,int x2,int y,int dy)
  function DrawHorizontalLine (line 394) | static void DrawHorizontalLine(unsigned int *pBitmap, int x1, int x2, in...
  function ScanLeft (line 402) | static int ScanLeft(unsigned int *pBitmap, int x, int y, int w, int h, i...
  function SearchLeft (line 414) | static int SearchLeft(unsigned int *pBitmap, int x, int y, int w, int h,...
  function ScanRight (line 426) | static int ScanRight(unsigned int *pBitmap, int x, int y, int w, int h, ...
  function SearchRight (line 438) | static int SearchRight(unsigned int *pBitmap, int x, int y, int w, int h...
  function flood (line 461) | void flood(unsigned int* pBitmap, int x, int y, int w, int h,

FILE: src/sort.c
  type variant (line 16) | typedef double variant ;
  type variant (line 18) | typedef long double variant ;
  type STR (line 21) | typedef struct tagSTR
  function compare (line 27) | static int compare (void *src, void *dst, unsigned char type)
  function sortup (line 90) | void sortup (int eax, int ebx, int ecx, unsigned int edx, unsigned int e...
  function sortdn (line 162) | void sortdn (int eax, int ebx, int ecx, unsigned int edx, unsigned int e...
  type timerparam (line 239) | typedef struct {char *handler; char *proc; unsigned char *flags; } timer...
  function hook (line 241) | unsigned int hook(unsigned int interval, timerparam *param)

FILE: src/sound_sdl.c
  function snd_free (line 2650) | int snd_free (int n)
  function envel (line 2660) | void envel (signed char *env)
  function sound (line 2670) | void sound (short chan, signed char ampl, unsigned char pitch, unsigned ...
  function quiet (line 2700) | void quiet (void)
  function note (line 2713) | static unsigned char note (unsigned char mask)
  function tone (line 2773) | static void tone (short *buffer)
  function pwm_interrupt_handler (line 2910) | void pwm_interrupt_handler(void)
  function core1_entry (line 2923) | void core1_entry(void) {
  function snd_setup (line 2985) | void snd_setup (void)
Condensed preview — 390 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,704K chars).
[
  {
    "path": ".gitattributes",
    "chars": 13,
    "preview": "*.ptb binary\n"
  },
  {
    "path": ".gitignore",
    "chars": 352,
    "preview": "# Prerequisites\n*.d\n*.bat\n\n# Object files\n*.o\n*.ko\n*.obj\nbuild/\n\n# Linker output\n*.ilk\n*.map\n*.exp\n\n# Precompiled Header"
  },
  {
    "path": "README.md",
    "chars": 1733,
    "preview": "# BBCSDL\nBBC BASIC for SDL 2.0 (BBCSDL) is a cross-platform implementation of the BBC BASIC programming language for\nWin"
  },
  {
    "path": "bin/android/Android.mk",
    "chars": 1142,
    "preview": "LOCAL_PATH := $(call my-dir)\n\ninclude $(CLEAR_VARS)\n\nLOCAL_MODULE := libbbc-prebuilt\n\nLOCAL_MODULE := main\n\nSDL_PATH := "
  },
  {
    "path": "bin/android/AndroidManifest.xml",
    "chars": 4969,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Replace com.test.game with the identifier of your game below, e.g.\n     com."
  },
  {
    "path": "bin/android/Application.mk",
    "chars": 368,
    "preview": "\n# Uncomment this if you're using STL in your project\n# You can find more information here:\n# https://developer.android."
  },
  {
    "path": "bin/android/BBCBasic.java",
    "chars": 593,
    "preview": "package com.rtrussell.bbcbasic;\n\nimport org.libsdl.app.SDLActivity; \n\npublic class BBCBasic extends SDLActivity\n{\n    pr"
  },
  {
    "path": "bin/android/bbdata_x86_64.asm",
    "chars": 68657,
    "preview": ";/*****************************************************************\\\n;*       BBC BASIC for SDL 2.0 (x86_64)            "
  },
  {
    "path": "bin/android/build.gradle",
    "chars": 2294,
    "preview": "def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');\ndef buildAsApplication = !buildAsLibrary\nif (buildAsApplic"
  },
  {
    "path": "bin/android/help.txt",
    "chars": 2607,
    "preview": "•    BBC BASIC is the programming language originally specified and adopted by the British Broadcasting Corporation for"
  },
  {
    "path": "bin/android/styles.xml",
    "chars": 229,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"android:Theme.DeviceDefault.NoActio"
  },
  {
    "path": "bin/ios/exported.txt",
    "chars": 14050,
    "preview": "_SDL_AddEventWatch\n_SDL_AddHintCallback\n_SDL_AddTimer\n_SDL_AllocFormat\n_SDL_AllocPalette\n_SDL_AllocRW\n_SDL_AtomicAdd\n_SD"
  },
  {
    "path": "bin/ios/help.txt",
    "chars": 2607,
    "preview": "•    BBC BASIC is the programming language originally specified and adopted by the British Broadcasting Corporation for"
  },
  {
    "path": "bin/linux/install32.txt",
    "chars": 833,
    "preview": "Installing SDL 2.0 on Linux systems:\n\n32-bit Debian / Mint / Ubuntu:\n\n sudo apt-get install libsdl2-2.0-0\n sudo apt-get "
  },
  {
    "path": "bin/linux/install64.txt",
    "chars": 358,
    "preview": "Installing SDL 2.0 on Linux systems:\n\n64-bit Debian / Mint / Ubuntu:\n\n sudo apt-get install libsdl2-2.0-0\n sudo apt-get "
  },
  {
    "path": "bin/linux/makefile",
    "chars": 2150,
    "preview": "# On Debian / Ubuntu / Mint download SDL 2.0 and NASM from the repository:\n# sudo apt-get install libsdl2-dev\n# sudo apt"
  },
  {
    "path": "bin/linux/mkicon.sh",
    "chars": 333,
    "preview": "#!/bin/bash\nMYDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" > /dev/null && pwd )\"\necho \"[Desktop Entry]\nName=BBC BASIC\nC"
  },
  {
    "path": "bin/macos/makefile",
    "chars": 2688,
    "preview": "# Download pre-compiled frameworks to /Library/Frameworks/\n# SDL2     from https://www.libsdl.org/download-2.0.php\n# SDL"
  },
  {
    "path": "bin/raspi/install-rpi.txt",
    "chars": 532,
    "preview": "Update your Raspberry Pi (recommended):\n\n sudo apt-get update\n sudo apt-get dist-upgrade\n\nInstall SDL 2.0:\n\n sudo apt-ge"
  },
  {
    "path": "bin/raspi/makefile",
    "chars": 2126,
    "preview": "# Get SDL 2.0 from the Raspbian repository:\n# sudo apt-get install libsdl2-dev\n# sudo apt-get install libsdl2-ttf-dev\n# "
  },
  {
    "path": "bin/raspi/mkicon.sh",
    "chars": 339,
    "preview": "#!/bin/bash\nMYDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" > /dev/null && pwd )\"\necho \"[Desktop Entry]\nName=BBC BASIC\nC"
  },
  {
    "path": "bin/rpi64/install-rpi.txt",
    "chars": 532,
    "preview": "Update your Raspberry Pi (recommended):\n\n sudo apt-get update\n sudo apt-get dist-upgrade\n\nInstall SDL 2.0:\n\n sudo apt-ge"
  },
  {
    "path": "bin/rpi64/makefile",
    "chars": 2152,
    "preview": "# Get SDL 2.0 from the Raspbian repository:\n# sudo apt-get install libsdl2-dev\n# sudo apt-get install libsdl2-ttf-dev\n# "
  },
  {
    "path": "bin/wasm/BBC.h",
    "chars": 11741,
    "preview": "/******************************************************************\\\n*       BBC BASIC for SDL 2.0 (Emscripten / Web Ass"
  },
  {
    "path": "bin/wasm/bbcsdl.h",
    "chars": 14539,
    "preview": "/******************************************************************\\\n*       BBC BASIC for SDL 2.0 (Emscripten / Web Ass"
  },
  {
    "path": "bin/wasm/bbcsdl_shell.html",
    "chars": 16821,
    "preview": "<!doctype html>\n<html lang=\"en-us\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"Content-Type\" content=\"tex"
  },
  {
    "path": "bin/wasm/makefile",
    "chars": 2031,
    "preview": "# Requires Python and the Emscripten SDK to be installed.\n\nVPATH  = ../BBCSDL/src ../BBCSDL/include\n\nCXX = emcc -s USE_P"
  },
  {
    "path": "bin/wasm/readme.txt",
    "chars": 242,
    "preview": "If you get a build failure like:\n\n'AssertionError: attempt to lock the cache while a parent process is holding the lock'"
  },
  {
    "path": "bin/win32/makefile",
    "chars": 2304,
    "preview": "# Update these paths as necessary to match your installation\nSDL_LIB = -LC:/SDL2-2.26.2/i686-w64-mingw32/lib -lSDL2main "
  },
  {
    "path": "bin/win32/sdlrun.c",
    "chars": 7664,
    "preview": "/******************************************************************\\\n*\t  BBC BASIC for SDL 2.0 (Windows edition)\t\t   *\n*"
  },
  {
    "path": "bin/win32/unpack32.nas",
    "chars": 6619,
    "preview": ";/*****************************************************************\\\n;*       BBC BASIC for SDL 2.0 (Windows edition)   "
  },
  {
    "path": "bin/win64/makefile",
    "chars": 2261,
    "preview": "# Update these paths as necessary to match your installation\nSDL_LIB = -LC:/SDL2-2.26.2/x86_64-w64-mingw32/lib -lSDL2mai"
  },
  {
    "path": "bin/win64/sdlrun.c",
    "chars": 7664,
    "preview": "/******************************************************************\\\n*\t  BBC BASIC for SDL 2.0 (Windows edition)\t\t   *\n*"
  },
  {
    "path": "bin/win64/unpack64.nas",
    "chars": 4746,
    "preview": ";/*****************************************************************\\\n;*\tBBC BASIC for SDL 2.0 (Windows edition)\t\t\t   *\n;"
  },
  {
    "path": "console/linux/makefile",
    "chars": 994,
    "preview": "VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include\nCXX = gcc -Wall -I ../../include -I ../../.."
  },
  {
    "path": "console/macm1/makefile",
    "chars": 984,
    "preview": "VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include\nCXX = gcc -Wall -I ../../include -I ../../.."
  },
  {
    "path": "console/macos/makefile",
    "chars": 1041,
    "preview": "VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include\nCXX = gcc -Wall -mmacosx-version-min=10.6 -I"
  },
  {
    "path": "console/raspi/makefile",
    "chars": 1124,
    "preview": "VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include\nCXX = gcc -Wall -I ../../include -I ../../.."
  },
  {
    "path": "console/rpi64/makefile",
    "chars": 1035,
    "preview": "VPATH = ../../src ../../include ../../../BBCSDL/src ../../../BBCSDL/include\nCXX = gcc -Wall -I ../../include -I ../../.."
  },
  {
    "path": "console/win64/makefile",
    "chars": 1095,
    "preview": "# Update these paths as necessary to match your installation\nVPATH = ../../src ../../include ../../../BBCSDL/src ../../."
  },
  {
    "path": "examples/games/.Tables/CrnrSlic.ptb",
    "chars": 81920,
    "preview": "xYwxxxh˼˼˼˘Wxwhyghixyx͛viwwxxxxihyyy͊hyyixvhxwxxwvhxhyʬ˼ʼʉzxʫhxxxyvhwwxyyy˻˺ʺʻixxxy˼˼˚yyʬ˼ʬʚʬʼʼ˼˼˼wXwhi˼˼˼ʬ˼ʼʺ˼˼˼gV'wvvu"
  },
  {
    "path": "examples/games/.Tables/EdgeSlic.ptb",
    "chars": 203931,
    "preview": ":YYYZhxvxwyvwgxhwxhhxvvgiixxyiihgvwxxywxghxuxxxwwWxxgwxwIXHXYiwfghwvVgYvhxiiwXxwwxwwwhixyxYxwgxwxvwhwxxxhwWJYYYJhhvxxxww"
  },
  {
    "path": "examples/games/.Tables/FlipChce.ptb",
    "chars": 419428,
    "preview": "EETDUEUUECDDEUUUDTUED4CDEU423D3DDC4CD4DDCCDDEUUEETUECDCEDD3DDD#3\u0012DDED4C4BT$C42C42CDUUUUSDTDUUDDTU5CDDCDDDUUDDTUETETUUEDD"
  },
  {
    "path": "examples/games/.Tables/TwstChce.ptb",
    "chars": 469776,
    "preview": "wxhvffwxwwxgvwgffwxgfgyfwwTfexwWfeXffUVfFTxxxvfwwhgvxwgwfffwwweVfwxfgeThfeeVeFUxwwfgwfefVxwwgfexgeVdVfUEwwxeefhwfVevgVfe"
  },
  {
    "path": "examples/games/.Tables/TwstFlip.ptb",
    "chars": 1464192,
    "preview": "pwwgVUVUfFFUvffgeVUUwgvvffgwggwfVVDvffgfvgxwwvffgwwwfxwxwVUVUgETfvVegwffwwVewfvvwwwwwwvVegfwwfwwwwuxwwwwvxvxhxgfFFUvVegf"
  },
  {
    "path": "examples/games/dibley.txt",
    "chars": 2612,
    "preview": "DIBLEY\n~~~~~~\n\nDibley is cat who likes to explore! Unfortunately he sometimes gets trapped. The challenge is to clear a "
  },
  {
    "path": "examples/general/banner.xml",
    "chars": 1798,
    "preview": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<rss version=\"2.0\" xmlns:media=\"http://search.yahoo.com/mrss\">\n  <channel>\n"
  },
  {
    "path": "examples/general/bbcbasic.txt",
    "chars": 1862,
    "preview": "BBC BASIC is the programming language originally specified and adopted by the British Broadcasting Corporation for its "
  },
  {
    "path": "examples/general/ceefax.car",
    "chars": 3519,
    "preview": "       CEEFAX 100  Sun 01 Oct 18:26/55   ppppp    `ppppp    `ppppp           #s#h||||j#ssh||||j#s#h||||   BBC j "
  },
  {
    "path": "examples/general/example.csv",
    "chars": 277,
    "preview": " #######.## ,##.## , ### ,##.## ,\n    Item,  Each, Qty, Total,\n,,,,\nDrawers,=25.95,=1,=B3*C3,\nLabels,=17.49,=1,=B4*C4,\nG"
  },
  {
    "path": "examples/general/mode7dem.car",
    "chars": 27640,
    "preview": "\u0006MICRONET Starnet (C)   \u0007811211087a\u0003  0p\u0003\u001d\r\u0004  Videotex emulation frame test     \u0003\u001d\r\u0004  Videotex emulation frame test     "
  },
  {
    "path": "examples/general/polyfit.csv",
    "chars": 160000,
    "preview": "0.38063,1.57384\n0.97237,4.46118\n0.31340,1.31030\n0.01233,1.28214\n0.65281,1.98653\n0.60111,1.75887\n0.97314,4.29389\n0.92176,"
  },
  {
    "path": "examples/general/weather.car",
    "chars": 3506,
    "preview": "   P151 CEEFAX 151  Sat 29 Oct  21:41/10\u0013      \u0016<ll,4<,,lh,,,4<,,lh,|,4<,,lh,,,4\u0013  \u00165jj 55bsj s 55jj s 55bsj s(5"
  },
  {
    "path": "examples/graphics/Demo.ptr",
    "chars": 799,
    "preview": "TO SPIRAL\nBK A+N\nTN B\nPC RND(99)/99 RND(99)/99 RND(99)/99\nEND\nREP SPIRAL 720 0 310\nNEW\nTO SIN\nFD SIN(RAD(N))*400\nHOME -6"
  },
  {
    "path": "examples/keywords.txt",
    "chars": 26788,
    "preview": "Keyword\t                             Description\tInformal syntax\n\nABS\tA function returning the absolute value of its num"
  },
  {
    "path": "examples/sounds/skaters.tun",
    "chars": 16046,
    "preview": "; LES PATINEURS (The Skaters' Waltz) by Emile Waldteufel\n; Transcribed for Z80 Music by R.J.Stickley, August 1985\n; Intr"
  },
  {
    "path": "examples/sounds/tofair.tun",
    "chars": 7562,
    "preview": "[\n[ \"Come to the Fair\" - Music: Easthope Martin, Lyrics: Helen Taylor.\n[ Arranged and coded by R.J.Stickley 3 June 1983."
  },
  {
    "path": "examples/starcmds.txt",
    "chars": 5759,
    "preview": "Command\t                             Description\tInformal syntax\n\n*BYE\tExit the interpreter and return to the calling pr"
  },
  {
    "path": "examples/vducodes.txt",
    "chars": 4772,
    "preview": "VDU code\t                            Description\t\t\t\t\tNotes\n\nVDU 0\tNUL, do nothing, it is ignored.\nVDU 1,c\tSend a charact"
  },
  {
    "path": "include/BBC.h",
    "chars": 10928,
    "preview": "/******************************************************************\\\n*       BBC BASIC for SDL 2.0 (32-bits or 64-bits) "
  },
  {
    "path": "include/SDL2_gfxPrimitives.h",
    "chars": 14232,
    "preview": "/* \n\nSDL2_gfxPrimitives.h: graphics primitives for SDL\n\nCopyright (C) 2012-2014  Andreas Schiffler\nAdditions for BBC BAS"
  },
  {
    "path": "include/SDL2_gfxPrimitives_font.h",
    "chars": 55777,
    "preview": "\n/* ---- 8x8 font definition ---- */\n\n/*  ZLIB (c) A. Schiffler 2012 */\n\n#define GFX_FONTDATAMAX (8*256)\n\nstatic unsigne"
  },
  {
    "path": "include/SDL2_rotozoom.h",
    "chars": 3005,
    "preview": "/*  \n\nSDL2_rotozoom.c: rotozoomer, zoomer and shrinker for 32bit or 8bit surfaces\n\nCopyright (C) 2001-2012  Andreas Schi"
  },
  {
    "path": "include/SDL_net.h",
    "chars": 17494,
    "preview": "/*\n  SDL_net:  An example cross-platform network library for use with SDL\n  Copyright (C) 1997-2016 Sam Lantinga <slouke"
  },
  {
    "path": "include/SDL_stbimage.h",
    "chars": 20943,
    "preview": "/*\n * A small header-only library to load an image into a RGB(A) SDL_Surface*,\n * like a stripped down version of SDL_Im"
  },
  {
    "path": "include/SDL_ttf.h",
    "chars": 11854,
    "preview": "/*\n  SDL_ttf:  A companion library to SDL for working with TrueType (tm) fonts\n  Copyright (C) 2001-2013 Sam Lantinga <s"
  },
  {
    "path": "include/bbccon.h",
    "chars": 7903,
    "preview": "/******************************************************************\\\n*       BBC BASIC Minimal Console Version          "
  },
  {
    "path": "include/bbcsdl.h",
    "chars": 11607,
    "preview": "/******************************************************************\\\n*       BBC BASIC for SDL 2.0 (64-bit)             "
  },
  {
    "path": "include/begin_code.h",
    "chars": 4089,
    "preview": "/*\n  Simple DirectMedia Layer\n  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>\n\n  This software is provided '"
  },
  {
    "path": "include/close_code.h",
    "chars": 1417,
    "preview": "/*\n  Simple DirectMedia Layer\n  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>\n\n  This software is provided '"
  },
  {
    "path": "include/dr_mp3.h",
    "chars": 144339,
    "preview": "// MP3 audio decoder. Public domain. See \"unlicense\" statement at the end of this file.\n// dr_mp3 - v0.4.0 - 2018-12-16\n"
  },
  {
    "path": "include/stb_image.h",
    "chars": 279537,
    "preview": "/* stb_image - v2.27 - public domain image loader - http://nothings.org/stb\n                                  no warrant"
  },
  {
    "path": "include/version.h",
    "chars": 520,
    "preview": "#define YEAR    \"2026\"          // Copyright year\n#define VERSION \"1.44a\"         // Version string\n#define VER_RES 1,44"
  },
  {
    "path": "include/zconf.h",
    "chars": 16316,
    "preview": "/* zconf.h -- configuration of the zlib compression library\n * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler\n * F"
  },
  {
    "path": "include/zlib.h",
    "chars": 96239,
    "preview": "/* zlib.h -- interface of the 'zlib' general purpose compression library\n  version 1.2.11, January 15th, 2017\n\n  Copyrig"
  },
  {
    "path": "licence.txt",
    "chars": 891,
    "preview": "Copyright (c) 2021, Richard T. Russell, http://www.rtrussell.co.uk/\n\nThis software is provided 'as-is', without any expr"
  },
  {
    "path": "src/SDL2_gfxPrimitives.c",
    "chars": 139996,
    "preview": "/* \n\nSDL2_gfxPrimitives.c: graphics primitives for SDL2 renderers\n\nCopyright (C) 2012-2014  Andreas Schiffler\nModificati"
  },
  {
    "path": "src/SDL2_rotozoom.c",
    "chars": 42710,
    "preview": "/*  \n\nSDL2_rotozoom.c: rotozoomer, zoomer and shrinker for 32bit or 8bit surfaces\n\nCopyright (C) 2012  Andreas Schiffler"
  },
  {
    "path": "src/b2Alias.cpp",
    "chars": 42731,
    "preview": "// This module creates unmangled and unhidden aliases for functions and methods,\n// also the Debug Draw interface via SD"
  },
  {
    "path": "src/bbasmb_arm_32.c",
    "chars": 19389,
    "preview": "/*****************************************************************\\\n*       32-bit BBC BASIC Interpreter                "
  },
  {
    "path": "src/bbasmb_arm_64.c",
    "chars": 215366,
    "preview": "/*****************************************************************\\\n*       32-bit BBC BASIC Interpreter                "
  },
  {
    "path": "src/bbasmb_arm_v6m.c",
    "chars": 49793,
    "preview": "/*******************************************************************\\\n *       32-bit BBC BASIC Interpreter             "
  },
  {
    "path": "src/bbasmb_wasm32.c",
    "chars": 61470,
    "preview": "/*****************************************************************\\\n*       32-bit BBC BASIC Interpreter (Emscripten / W"
  },
  {
    "path": "src/bbasmb_x86_32.TODO.c",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/bbasmb_x86_64.c",
    "chars": 85318,
    "preview": "/*****************************************************************\\\n*       64-bit BBC BASIC Interpreter                "
  },
  {
    "path": "src/bbccli.c",
    "chars": 22833,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC for SDL 2.0      "
  },
  {
    "path": "src/bbccon.c",
    "chars": 43687,
    "preview": "/*****************************************************************\\\n*       BBC BASIC Minimal Console Version           "
  },
  {
    "path": "src/bbccos.c",
    "chars": 27904,
    "preview": "/*****************************************************************\\\n*       BBC BASIC Minimal Console Version           "
  },
  {
    "path": "src/bbcmos.c",
    "chars": 57091,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC for SDL 2.0      "
  },
  {
    "path": "src/bbcsdl.c",
    "chars": 45617,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC for SDL 2.0      "
  },
  {
    "path": "src/bbctmp.m",
    "chars": 415,
    "preview": "#include <Foundation/Foundation.h>\n#include <string.h>\n\nint GetTempPath(size_t buflen, char *buffer)\n{ @autoreleasepool\n"
  },
  {
    "path": "src/bbcvdu.c",
    "chars": 62103,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC for SDL 2.0      "
  },
  {
    "path": "src/bbcvtx.c",
    "chars": 13946,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC for SDL 2.0      "
  },
  {
    "path": "src/bbdata_arm_32.s",
    "chars": 73044,
    "preview": "/*****************************************************************\\\n*       BBC BASIC for SDL 2.0 (ARM_32)              "
  },
  {
    "path": "src/bbdata_arm_64.s",
    "chars": 74244,
    "preview": "/*****************************************************************\\\n*       BBC BASIC for SDL 2.0 (ARM_64)              "
  },
  {
    "path": "src/bbdata_wasm32.c",
    "chars": 60524,
    "preview": "/*****************************************************************\\\n*   BBC BASIC for SDL 2.0 (32-bit Web Assembly)     "
  },
  {
    "path": "src/bbdata_x86_32.nas",
    "chars": 67758,
    "preview": ";/*****************************************************************\\\n;*       BBC BASIC for SDL 2.0 (x86_32)            "
  },
  {
    "path": "src/bbdata_x86_64.nas",
    "chars": 68749,
    "preview": ";/*****************************************************************\\\n;*       BBC BASIC for SDL 2.0 (x86_64)            "
  },
  {
    "path": "src/bbeval.c",
    "chars": 61653,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC Interpreter      "
  },
  {
    "path": "src/bbexec.c",
    "chars": 97073,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC Interpreter      "
  },
  {
    "path": "src/bbmain.c",
    "chars": 44844,
    "preview": "/*****************************************************************\\\n*       32-bit or 64-bit BBC BASIC Interpreter      "
  },
  {
    "path": "src/flood.c",
    "chars": 17583,
    "preview": "// Adapted by Richard Russell, 18-Jun-2016 from QuickFill.cpp\n//\n// Author : John R. Shaw (shawj2@earthlink.net)\n// Date"
  },
  {
    "path": "src/sort.c",
    "chars": 5259,
    "preview": "// Shell sort\n// iOS does not permit arbitrary code execution so the code which would normally\n// go in 'sortlib.bbc' is"
  },
  {
    "path": "src/sound_sdl.c",
    "chars": 175639,
    "preview": "/*****************************************************************\\\n*       BBC BASIC Console Mode edition for Raspberry"
  }
]

// ... and 286 more files (download for full content)

About this extraction

This page contains the full source code of the rtrussell/BBCSDL GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 390 files (5.2 MB), approximately 1.4M tokens, and a symbol index with 1488 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!