diff --git a/samples.md b/samples.md
index a84d60da..91dc99d6 100644
--- a/samples.md
+++ b/samples.md
@@ -7,6 +7,7 @@
- **[3D Grapher](samples/3d-grapher/index.md)** • [Ashish Kushwaha](samples/ashish-kushwaha.md) • [STxAxTIC](samples/stxaxtic.md) [3d](samples/3d.md), [gl](samples/gl.md)
- **[3DS Viewer](samples/3ds-viewer/index.md)** • [*missing*](samples/author-missing.md) [3d](samples/3d.md), [wireframe](samples/wireframe.md), [legacy](samples/legacy.md)
- **[Abacus](samples/abacus/index.md)** • [Bob Seguin](samples/bob-seguin.md) [abacus](samples/abacus.md), [arithmetic](samples/arithmetic.md)
+- **[American Flag](samples/american-flag/index.md)** • [Vince](samples/vince.md) [2d](samples/2d.md), [graphics](samples/graphics.md)
- **[Amongst](samples/amongst/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [multiplayer](samples/multiplayer.md)
- **[Animax](samples/animax/index.md)** • [Bob Seguin](samples/bob-seguin.md) [art](samples/art.md), [drawing](samples/drawing.md)
- **[Arc Demo](samples/arc-demo/index.md)** • [Tsiplacov Sergey](samples/tsiplacov-sergey.md) [game](samples/game.md), [platformer](samples/platformer.md)
@@ -16,11 +17,14 @@
- **[Bar Demo](samples/bar-demo/index.md)** • [Douglas Park](samples/douglas-park.md) [tui](samples/tui.md), [dos world](samples/dos-world.md)
- **[Beatdown](samples/beatdown/index.md)** • [Brian Murphy](samples/brian-murphy.md) [game](samples/game.md), [legacy](samples/legacy.md)
- **[Bezier](samples/bezier/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
+- **[Big LEDs](samples/big-leds/index.md)** • [Scott Edwards](samples/scott-edwards.md) [clock](samples/clock.md), [dos world](samples/dos-world.md)
- **[Binary Clock](samples/binary-clock/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[Binary Counter](samples/binary-counter/index.md)** • [rpgfan3233](samples/rpgfan3233.md) [binary](samples/binary.md), [counter](samples/counter.md)
- **[Biorhythm Chart](samples/biorhythm-chart/index.md)** • [Bob Seguin](samples/bob-seguin.md) [biorhythms](samples/biorhythms.md)
- **[Blockout](samples/blockout/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [breakout](samples/breakout.md)
+- **[Bomber](samples/bomber/index.md)** • [Doug Lowe](samples/doug-lowe.md) [game](samples/game.md), [dos world](samples/dos-world.md)
- **[Breakout](samples/breakout/index.md)** • [kinem](samples/kinem.md) [game](samples/game.md), [breakout](samples/breakout.md)
+- **[Bubbles](samples/bubbles/index.md)** • [Tom Sales](samples/tom-sales.md) [screensaver](samples/screensaver.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Calc](samples/calc/index.md)** • [William Loughner](samples/william-loughner.md) [calculator](samples/calculator.md), [dos world](samples/dos-world.md)
- **[Calendar](samples/calendar/index.md)** • [A&A De Pasquale](samples/a&a-de-pasquale.md) [calendar](samples/calendar.md), [pdf](samples/pdf.md), [dos world](samples/dos-world.md)
- **[Cant Contain Me](samples/cant-contain-me/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md)
@@ -36,20 +40,26 @@
- **[Convert BMP to Dominoes](samples/convert-bmp-to-dominoes/index.md)** • [Richard Frost](samples/richard-frost.md) [image processing](samples/image-processing.md)
- **[Conways Game of Life](samples/conways-game-of-life/index.md)** • [Luke](samples/luke.md) [automata](samples/automata.md), [conway](samples/conway.md)
- **[Cram](samples/cram/index.md)** • [Hardin Brothers](samples/hardin-brothers.md) [game](samples/game.md), [dos world](samples/dos-world.md)
+- **[Curve Approximator](samples/curve-approximator/index.md)** • [Vince](samples/vince.md) [curve](samples/curve.md), [bezier](samples/bezier.md)
- **[Curve Smoother](samples/curve-smoother/index.md)** • [STxAxTIC](samples/stxaxtic.md) • [Fellippe Heitor](samples/fellippe-heitor.md) [curve](samples/curve.md), [interpolation](samples/interpolation.md)
- **[Darokin](samples/darokin/index.md)** • [darokin](samples/darokin.md) [screensaver](samples/screensaver.md), [starfield](samples/starfield.md)
- **[Dec to Frac](samples/dec-to-frac/index.md)** • [A&A De Pasquale](samples/a&a-de-pasquale.md) [math](samples/math.md), [dos world](samples/dos-world.md)
+- **[Dialog Demo Box](samples/dialog-demo-box/index.md)** • [Abacus](samples/abacus.md) [gui](samples/gui.md), [dialog](samples/dialog.md)
- **[Diamond Pong](samples/diamond-pong/index.md)** • [John Wolfskill](samples/john-wolfskill.md) [game](samples/game.md), [pong](samples/pong.md), [dos world](samples/dos-world.md)
- **[Didris](samples/didris/index.md)** • [Dietmar Moritz](samples/dietmar-moritz.md) [game](samples/game.md), [tetris](samples/tetris.md)
+- **[Die Odds](samples/die-odds/index.md)** • [Tom Sales](samples/tom-sales.md) [statistics](samples/statistics.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Double Pendulum](samples/double-pendulum/index.md)** • [*missing*](samples/author-missing.md) [physics](samples/physics.md), [pendulum](samples/pendulum.md)
- **[Dragon Warrior](samples/dragon-warrior/index.md)** • [Cobalt](samples/cobalt.md) [game](samples/game.md), [rpg](samples/rpg.md)
- **[Dropping Balls](samples/dropping-balls/index.md)** • [bplus](samples/bplus.md) [gravity](samples/gravity.md), [collisions](samples/collisions.md)
- **[Eliza](samples/eliza/index.md)** • [*missing*](samples/author-missing.md) [ai](samples/ai.md), [eliza](samples/eliza.md)
- **[Ellipse Intersecting Line](samples/ellipse-intersecting-line/index.md)** • [STxAxTIC](samples/stxaxtic.md) [geometry](samples/geometry.md), [intersections](samples/intersections.md)
+- **[ESP](samples/esp/index.md)** • [Tom Sales](samples/tom-sales.md) [statistics](samples/statistics.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Fibonacci Variations](samples/fibonacci-variations/index.md)** • [STxAxTIC](samples/stxaxtic.md) [fibonacci](samples/fibonacci.md), [spiral](samples/spiral.md)
- **[Filled Circles and Ellipses](samples/filled-circles-and-ellipses/index.md)** • [QB64 Team 2018](samples/qb64-team-2018.md) [filled circle](samples/filled-circle.md), [ellipse](samples/ellipse.md)
- **[Fire 13](samples/fire-13/index.md)** • [*missing*](samples/author-missing.md) [fire](samples/fire.md), [graphics](samples/graphics.md)
- **[Fire Demo](samples/fire-demo/index.md)** • [harixxx](samples/harixxx.md) [graphics](samples/graphics.md), [fire](samples/fire.md)
+- **[Fish Mosaic](samples/fish-mosaic/index.md)** • [Vince](samples/vince.md) [mosaic](samples/mosaic.md), [fish](samples/fish.md)
+- **[Flip](samples/flip/index.md)** • [Tom Sales](samples/tom-sales.md) [statistics](samples/statistics.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Floormaper](samples/floormaper/index.md)** • [Antoni Gual](samples/antoni-gual.md) [graphics](samples/graphics.md), [floorscape](samples/floorscape.md)
- **[Four Player Pong](samples/four-player-pong/index.md)** • [Matthew](samples/matthew.md) [game](samples/game.md), [pong](samples/pong.md)
- **[Fractal](samples/fractal/index.md)** • [RhoSigma](samples/rhosigma.md) [screenblanker](samples/screenblanker.md)
@@ -57,9 +67,12 @@
- **[Fractal Fern](samples/fractal-fern/index.md)** • [*missing*](samples/author-missing.md) [fractal](samples/fractal.md), [fern](samples/fern.md)
- **[Frogger](samples/frogger/index.md)** • [Matt Bross](samples/matt-bross.md) [game](samples/game.md), [frogger](samples/frogger.md)
- **[Frostbite](samples/frostbite/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [frostbite](samples/frostbite.md)
+- **[FunSubs](samples/funsubs/index.md)** • [Jon Mark O'Connor](samples/jon-mark-o'connor.md) [graphics](samples/graphics.md), [dos world](samples/dos-world.md)
- **[Future Blocks](samples/future-blocks/index.md)** • [Michael Fogleman](samples/michael-fogleman.md) [game](samples/game.md), [tetris](samples/tetris.md)
- **[Ghost Wizard](samples/ghost-wizard/index.md)** • [Zack Johnson](samples/zack-johnson.md) [game](samples/game.md), [roguelike](samples/roguelike.md)
- **[Globe](samples/globe/index.md)** • [Jeh](samples/jeh.md) • [Yu](samples/yu.md) [3d](samples/3d.md), [sphere](samples/sphere.md)
+- **[Globs 0](samples/globs-0/index.md)** • [Tom Sales](samples/tom-sales.md) [screensaver](samples/screensaver.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
+- **[Globs 1](samples/globs-1/index.md)** • [Rick Ellis](samples/rick-ellis.md) [screensaver](samples/screensaver.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Gorillas](samples/gorillas/index.md)** • [Microsoft](samples/microsoft.md) [game](samples/game.md), [artillery](samples/artillery.md)
- **[Gujero2](samples/gujero2/index.md)** • [Antoni Gual](samples/antoni-gual.md) [screensaver](samples/screensaver.md), [tunnel](samples/tunnel.md)
- **[Hangman](samples/hangman/index.md)** • [A&A De Pasquale](samples/a&a-de-pasquale.md) [game](samples/game.md), [hangman](samples/hangman.md), [dos world](samples/dos-world.md)
@@ -68,6 +81,7 @@
- **[Hunters Revenge](samples/hunters-revenge/index.md)** • [Ashish Kushwaha](samples/ashish-kushwaha.md) [game](samples/game.md), [shooter](samples/shooter.md)
- **[Integrators](samples/integrators/index.md)** • [STxAxTIC](samples/stxaxtic.md) [physics](samples/physics.md), [simulation](samples/simulation.md)
- **[Inverse Julia Fractal Explorer](samples/inverse-julia-fractal-explorer/index.md)** • [Zom-B](samples/zom-b.md) [fractal](samples/fractal.md), [julia set](samples/julia-set.md)
+- **[InYrFace](samples/inyrface/index.md)** • [Tom Sales](samples/tom-sales.md) [screensaver](samples/screensaver.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Jpeg Maker](samples/jpeg-maker/index.md)** • [Artelius](samples/artelius.md) [jpeg](samples/jpeg.md), [image manipulation](samples/image-manipulation.md)
- **[Julia Rings](samples/julia-rings/index.md)** • [Relsoft](samples/relsoft.md) [fractal](samples/fractal.md), [julia set](samples/julia-set.md)
- **[Kaleidoscope](samples/kaleidoscope/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
@@ -76,6 +90,7 @@
- **[Kaleidoscope Mill](samples/kaleidoscope-mill/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[Lens Simulator](samples/lens-simulator/index.md)** • [STxAxTIC](samples/stxaxtic.md) [2d](samples/2d.md), [ray tracer](samples/ray-tracer.md)
- **[Letter Blast](samples/letter-blast/index.md)** • [A&A De Pasquale](samples/a&a-de-pasquale.md) [game](samples/game.md), [letter](samples/letter.md), [dos world](samples/dos-world.md)
+- **[LFX](samples/lfx/index.md)** • [Jon Mark O'Connor](samples/jon-mark-o'connor.md) [graphics](samples/graphics.md), [dos world](samples/dos-world.md)
- **[Lightning One](samples/lightning-one/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[Lightning Two](samples/lightning-two/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[LightsOn](samples/lightson/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [lights](samples/lights.md)
@@ -86,6 +101,7 @@
- **[Loan Amortization](samples/loan-amortization/index.md)** • [Alan Zeichick](samples/alan-zeichick.md) [finance](samples/finance.md), [dos world](samples/dos-world.md)
- **[Lorenz Attractor](samples/lorenz-attractor/index.md)** • [Vince](samples/vince.md) [lorenz](samples/lorenz.md), [rotations](samples/rotations.md)
- **[Lucid Drawing](samples/lucid-drawing/index.md)** • [Lucid](samples/lucid.md) [2d](samples/2d.md), [draw](samples/draw.md)
+- **[Madness](samples/madness/index.md)** • [Dennis Mull](samples/dennis-mull.md) [game](samples/game.md), [dos world](samples/dos-world.md)
- **[Manadla](samples/manadla/index.md)** • [Antoni Gual](samples/antoni-gual.md) [screensaver](samples/screensaver.md), [9 lines](samples/9-lines.md)
- **[Mandelbrot Animator](samples/mandelbrot-animator/index.md)** • [*missing*](samples/author-missing.md) [fractal](samples/fractal.md), [mandelbrot](samples/mandelbrot.md)
- **[Mandelbrot Set 2003](samples/mandelbrot-set-2003/index.md)** • [Antoni Gual](samples/antoni-gual.md) [fractal](samples/fractal.md), [mandelbrot](samples/mandelbrot.md), [9 lines](samples/9-lines.md)
@@ -105,22 +121,29 @@
- **[Mystify](samples/mystify/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[Names](samples/names/index.md)** • [David Bannon](samples/david-bannon.md) [data management](samples/data-management.md), [dos world](samples/dos-world.md)
- **[Nibbles](samples/nibbles/index.md)** • [Microsoft](samples/microsoft.md) [game](samples/game.md), [snake](samples/snake.md)
+- **[Number Blaster](samples/number-blaster/index.md)** • [R. K. Fink](samples/r.-k.-fink.md) [game](samples/game.md), [dos world](samples/dos-world.md)
- **[Parabolas](samples/parabolas/index.md)** • [STxAxTIC](samples/stxaxtic.md) [zen](samples/zen.md)
- **[Particle Fountain](samples/particle-fountain/index.md)** • [bplus](samples/bplus.md) [particles](samples/particles.md)
- **[Pattern](samples/pattern/index.md)** • [Antoni Gual](samples/antoni-gual.md) [screensaver](samples/screensaver.md), [9 lines](samples/9-lines.md)
+- **[Pattern Editor](samples/pattern-editor/index.md)** • [Abacus](samples/abacus.md) [art](samples/art.md), [pattern](samples/pattern.md)
+- **[Pendulum Double](samples/pendulum-double/index.md)** • [Vince](samples/vince.md) [physics](samples/physics.md)
- **[Pendulum Game](samples/pendulum-game/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [pendulum](samples/pendulum.md)
+- **[Personal](samples/personal/index.md)** • [Tim Syrop](samples/tim-syrop.md) [screensaver](samples/screensaver.md), [dos world](samples/dos-world.md)
- **[Phone](samples/phone/index.md)** • [Hardin Brothers](samples/hardin-brothers.md) [data management](samples/data-management.md), [dos world](samples/dos-world.md)
- **[Pipes Puzzle](samples/pipes-puzzle/index.md)** • [Dav](samples/dav.md) [game](samples/game.md), [puzzle](samples/puzzle.md)
- **[PixelPlus](samples/pixelplus/index.md)** • [Chris Chadwick](samples/chris-chadwick.md) [graphics](samples/graphics.md), [bitmap](samples/bitmap.md)
- **[Plasma Effect](samples/plasma-effect/index.md)** • [Cyperium](samples/cyperium.md) [graphics](samples/graphics.md), [plasma](samples/plasma.md)
- **[Plasma Non-Pal](samples/plasma-non-pal/index.md)** • [Relsoft](samples/relsoft.md) [screensaver](samples/screensaver.md), [plasma](samples/plasma.md)
- **[Platform](samples/platform/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [platform](samples/platform.md)
+- **[Plumeria](samples/plumeria/index.md)** • [Vince](samples/vince.md) [2d](samples/2d.md), [graphics](samples/graphics.md)
+- **[Pull-down Menu](samples/pull-down-menu/index.md)** • [Abacus](samples/abacus.md) [gui](samples/gui.md), [menu](samples/menu.md)
- **[QB Clock](samples/qb-clock/index.md)** • [Alan Zeichick](samples/alan-zeichick.md) [clock](samples/clock.md)
- **[QB Tank Commander](samples/qb-tank-commander/index.md)** • [Matthew River Knight](samples/matthew-river-knight.md) [game](samples/game.md), [tank](samples/tank.md)
- **[QB-NVentory](samples/qb-nventory/index.md)** • [Nathan Thomas](samples/nathan-thomas.md) [data management](samples/data-management.md)
- **[QBAscii](samples/qbascii/index.md)** • [Jeremy Munn](samples/jeremy-munn.md) [drawing](samples/drawing.md), [ascii](samples/ascii.md)
- **[QBlocks](samples/qblocks/index.md)** • [Microsoft](samples/microsoft.md) [game](samples/game.md), [tetris](samples/tetris.md)
- **[QBricks](samples/qbricks/index.md)** • [Microsoft](samples/microsoft.md) [game](samples/game.md), [breakout](samples/breakout.md)
+- **[QBRnd](samples/qbrnd/index.md)** • [Jeff Davis](samples/jeff-davis.md) [statistics](samples/statistics.md), [dos world](samples/dos-world.md)
- **[QCards](samples/qcards/index.md)** • [Microsoft](samples/microsoft.md) [data management](samples/data-management.md)
- **[QDigger](samples/qdigger/index.md)** • [RETROQB45](samples/retroqb45.md) [game](samples/game.md), [digger](samples/digger.md)
- **[QMaze](samples/qmaze/index.md)** • [Microsoft](samples/microsoft.md) [game](samples/game.md), [maze](samples/maze.md)
@@ -143,8 +166,10 @@
- **[Shooter](samples/shooter/index.md)** • [*missing*](samples/author-missing.md) [game](samples/game.md), [shooter](samples/shooter.md)
- **[Sine Wave Explorer](samples/sine-wave-explorer/index.md)** • [*missing*](samples/author-missing.md) [trigonometry](samples/trigonometry.md)
- **[SineCube](samples/sinecube/index.md)** • [Mennonite](samples/mennonite.md) [graphics](samples/graphics.md)
+- **[Slot](samples/slot/index.md)** • [Tom Sales](samples/tom-sales.md) [money](samples/money.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Snake Basic](samples/snake-basic/index.md)** • [pcluddite](samples/pcluddite.md) [game](samples/game.md), [snake](samples/snake.md)
- **[Sokoban](samples/sokoban/index.md)** • [David Joffe](samples/david-joffe.md) [game](samples/game.md), [puzzle](samples/puzzle.md)
+- **[Sort](samples/sort/index.md)** • [A&A De Pasquale](samples/a&a-de-pasquale.md) [sort](samples/sort.md), [dos world](samples/dos-world.md)
- **[Sort Demo](samples/sort-demo/index.md)** • [Microsoft](samples/microsoft.md) [sort](samples/sort.md)
- **[Space64](samples/space64/index.md)** • [Cyperium](samples/cyperium.md) [game](samples/game.md), [space shooter](samples/space-shooter.md)
- **[Spaceship](samples/spaceship/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [space shooter](samples/space-shooter.md)
@@ -153,10 +178,14 @@
- **[Starfield Torus](samples/starfield-torus/index.md)** • [JKC](samples/jkc.md) [starfield](samples/starfield.md)
- **[Stock Watcher](samples/stock-watcher/index.md)** • [*missing*](samples/author-missing.md) [money](samples/money.md), [stocks](samples/stocks.md)
- **[Super Mario Jump](samples/super-mario-jump/index.md)** • [Terry Ritchie](samples/terry-ritchie.md) [game](samples/game.md), [mario](samples/mario.md)
+- **[Template DW](samples/template-dw/index.md)** • [Tim Syrop](samples/tim-syrop.md) [tui](samples/tui.md), [dos world](samples/dos-world.md)
- **[Texel Raytracer](samples/texel-raytracer/index.md)** • [Antoni Gual](samples/antoni-gual.md) [3d](samples/3d.md), [ray tracing](samples/ray-tracing.md)
- **[Tic Tac Toe](samples/tic-tac-toe/index.md)** • [Paul Meyer](samples/paul-meyer.md) [game](samples/game.md), [tic tac toe](samples/tic-tac-toe.md)
- **[Tic Tac Toe 3D](samples/tic-tac-toe-3d/index.md)** • [qbguy](samples/qbguy.md) [game](samples/game.md), [tic tac toe](samples/tic-tac-toe.md)
- **[Tic Tac Toe Rings](samples/tic-tac-toe-rings/index.md)** • [Fellippe Heitor](samples/fellippe-heitor.md) [game](samples/game.md), [tic tac toe rings](samples/tic-tac-toe-rings.md)
+- **[Tile Demo](samples/tile-demo/index.md)** • [Greg Ennen](samples/greg-ennen.md) [tile](samples/tile.md), [dos world](samples/dos-world.md)
+- **[Tile Engine Test](samples/tile-engine-test/index.md)** • [Abacus](samples/abacus.md) [art](samples/art.md), [tile](samples/tile.md)
+- **[Tile Experiment](samples/tile-experiment/index.md)** • [Greg Ennen](samples/greg-ennen.md) [tile](samples/tile.md), [dos world](samples/dos-world.md)
- **[Torus Demo](samples/torus-demo/index.md)** • [Microsoft](samples/microsoft.md) [geometry](samples/geometry.md), [torus](samples/torus.md)
- **[Tower of Hanoi](samples/tower-of-hanoi/index.md)** • [*missing*](samples/author-missing.md) [game](samples/game.md), [tower](samples/tower.md)
- **[Trig Demo](samples/trig-demo/index.md)** • [STxAxTIC](samples/stxaxtic.md) [trigonometry](samples/trigonometry.md)
@@ -166,5 +195,6 @@
- **[Vector Field](samples/vector-field/index.md)** • [STxAxTIC](samples/stxaxtic.md) [2d](samples/2d.md), [vectors](samples/vectors.md)
- **[Vortex](samples/vortex/index.md)** • [Antoni Gual](samples/antoni-gual.md) [screensaver](samples/screensaver.md), [9 lines](samples/9-lines.md)
- **[Water](samples/water/index.md)** • [*missing*](samples/author-missing.md) [wave motion](samples/wave-motion.md)
+- **[Wheel O](samples/wheel-o/index.md)** • [Tom Sales](samples/tom-sales.md) [game](samples/game.md), [dos world](samples/dos-world.md), [254 chars](samples/254-chars.md)
- **[Worms](samples/worms/index.md)** • [Rho Sigma](samples/rho-sigma.md) [screenblanker](samples/screenblanker.md)
- **[XE Hex Editor](samples/xe-hex-editor/index.md)** • [Dav](samples/dav.md) [editor](samples/editor.md), [hex](samples/hex.md)
diff --git a/samples/254-chars.md b/samples/254-chars.md
new file mode 100644
index 00000000..00ed8772
--- /dev/null
+++ b/samples/254-chars.md
@@ -0,0 +1,57 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: 254 CHARS
+
+**[Bubbles](bubbles/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Die Odds](die-odds/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [statistics](statistics.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[ESP](esp/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [statistics](statistics.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Flip](flip/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [statistics](statistics.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Globs 0](globs-0/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Globs 1](globs-1/index.md)**
+
+[🐝 Rick Ellis](rick-ellis.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[InYrFace](inyrface/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Slot](slot/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [money](money.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
+
+**[Wheel O](wheel-o/index.md)**
+
+[🐝 Tom Sales](tom-sales.md) 🔗 [game](game.md), [dos world](dos-world.md), [254 chars](254-chars.md)
+
+Copyright (C) 1994-95 DOS Resource Guide/DOS World Published in Issue #17, September 1994, page ...
diff --git a/samples/2d.md b/samples/2d.md
index 24c3e8b1..61b395a2 100644
--- a/samples/2d.md
+++ b/samples/2d.md
@@ -2,6 +2,12 @@
## SAMPLES: 2D
+**[American Flag](american-flag/index.md)**
+
+[🐝 Vince](vince.md) 🔗 [2d](2d.md), [graphics](graphics.md)
+
+Waving American Flag demo by Vince.
+
**[Lens Simulator](lens-simulator/index.md)**
[🐝 STxAxTIC](stxaxtic.md) 🔗 [2d](2d.md), [ray tracer](ray-tracer.md)
@@ -14,6 +20,12 @@ This program simulates light rays passing through a lens with a given index of r
Drawing program by Lucid.
+**[Plumeria](plumeria/index.md)**
+
+[🐝 Vince](vince.md) 🔗 [2d](2d.md), [graphics](graphics.md)
+
+Plumeria demo by Vince.
+
**[Vector Field](vector-field/index.md)**
[🐝 STxAxTIC](stxaxtic.md) 🔗 [2d](2d.md), [vectors](vectors.md)
diff --git a/samples/3d-engine-prototypes/index.md b/samples/3d-engine-prototypes/index.md
index b239595f..d2855f28 100644
--- a/samples/3d-engine-prototypes/index.md
+++ b/samples/3d-engine-prototypes/index.md
@@ -32,5 +32,3 @@ Various experiments in software 3D graphics. Warning: Uses no functions or subs!
![3dengineqb2.png](img/3dengineqb2.png)
🔗 [3d](../3d.md), [graph](../graph.md)
-
-
diff --git a/samples/a&a-de-pasquale.md b/samples/a&a-de-pasquale.md
index 1d2e4ee3..2a6150b1 100644
--- a/samples/a&a-de-pasquale.md
+++ b/samples/a&a-de-pasquale.md
@@ -31,3 +31,9 @@
[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [measure](measure.md), [dos world](dos-world.md)
' MEASURE.BAS - A program for performing measurement conversions ' by Antonio & Alfonso De P...
+
+**[Sort](sort/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [sort](sort.md), [dos world](dos-world.md)
+
+' SORT.BAS ' by Antonio and Alfonso De Pasquale ' Copyright (C) 1994 DOS Resource Guide ' Publi...
diff --git a/samples/american-flag/img/screenshot.png b/samples/american-flag/img/screenshot.png
new file mode 100644
index 00000000..d09348fd
Binary files /dev/null and b/samples/american-flag/img/screenshot.png differ
diff --git a/samples/american-flag/index.md b/samples/american-flag/index.md
new file mode 100644
index 00000000..607dbc9a
--- /dev/null
+++ b/samples/american-flag/index.md
@@ -0,0 +1,29 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: AMERICAN FLAG
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Vince](../vince.md)
+
+### Description
+
+```text
+Waving American Flag demo by Vince.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "usflag2.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/american-flag/src/usflag2.bas)
+* [RUN "usflag2.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/american-flag/src/usflag2.bas)
+* [PLAY "usflag2.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/american-flag/src/usflag2.bas)
+
+### File(s)
+
+* [usflag2.bas](src/usflag2.bas)
+
+🔗 [2d](../2d.md), [graphics](../graphics.md)
diff --git a/samples/american-flag/src/usflag2.bas b/samples/american-flag/src/usflag2.bas
new file mode 100644
index 00000000..0436178f
--- /dev/null
+++ b/samples/american-flag/src/usflag2.bas
@@ -0,0 +1,124 @@
+Option _Explicit
+DefLng A-Z
+
+Dim sw, sh
+Dim h, w, a
+Dim img
+Dim x0, y0, x, y, dz
+Dim tl, tr, bl, br
+Dim r, g, b
+Dim i, j, t
+
+sw = 640
+sh = 480
+
+Dim Shared pi As Double
+pi = 4 * Atn(1)
+
+Screen _NewImage(sw, sh, 32)
+
+h = 300
+w = 1.9 * h
+a = h / 7
+
+img = _NewImage(w, h, 32)
+_Dest img
+x0 = 0
+y0 = 0
+
+Line (0, 0)-Step(w, h), _RGB(255, 255, 255), BF
+For i = 0 To 6
+ Line (0, i * h * 2 / 13)-Step(w, h / 13), _RGB(255 * 0.698, 255 * 0.132, 255 * 0.203), BF
+Next
+Line (0, 0)-Step(w * 2 / 5, h * 7 / 13), _RGB(255 * 0.234, 255 * 0.233, 255 * 0.430), BF
+
+For i = 0 To 4
+ For j = 0 To 5
+ starf (j * 2 + 1) * w * 2 / (5 * 12), (i * 2 + 1) * h * 7 / 130, h * 4 / (13 * 5 * 2), _RGB(255, 255, 255)
+ Next
+Next
+
+For i = 1 To 4
+ For j = 1 To 5
+ starf (j * 2) * w * 2 / (5 * 12), (i * 2) * h * 7 / 130, h * 4 / (13 * 5 * 2), _RGB(255, 255, 255)
+ Next
+Next
+
+_Dest 0
+'_putimage (sw/2 - w/2, sh/2 - h/2), img
+_Source img
+
+x0 = sw / 2 - w / 2 '+ sw
+y0 = sh / 2 - h / 2 '+ sh
+
+Dim t As Double
+Dim z As Double
+
+Dim xx As Double, yy As Double
+Dim dx As Double, dy As Double
+Do
+ t = t + 0.2
+
+ Line (0, 0)-Step(sw, sh), _RGB(0, 0, 0), BF
+
+ For y = 0 To h + a * 0.707 Step 1
+ For x = 0 To w + a * 0.707 Step 1
+ z = (0.1 + 0.4 * (x / w)) * a * Sin(x / 35 - y / 70 - t) + 0.5 * a
+ dz = 50 * a * Cos(x / 35 - y / 70 - t) / 35
+
+ xx = x + z * 0.707 - a * 0.707
+ yy = y - z * 0.707
+
+ If (Int(xx) >= 0 And Int(xx) < w - 1 And Int(yy) >= 0 And Int(yy) < h - 1) Then
+ tl = Point(Int(xx), Int(yy))
+ tr = Point(Int(xx) + 1, Int(yy))
+ bl = Point(Int(xx), Int(yy) + 1)
+ br = Point(Int(xx) + 1, Int(yy) + 1)
+
+ dx = xx - Int(xx)
+ dy = yy - Int(yy)
+
+ r = _Round((1 - dy) * ((1 - dx) * _Red(tl) + dx * _Red(tr)) + dy * ((1 - dx) * _Red(bl) + dx * _Red(br)))
+ g = _Round((1 - dy) * ((1 - dx) * _Green(tl) + dx * _Green(tr)) + dy * ((1 - dx) * _Green(bl) + dx * _Green(br)))
+ b = _Round((1 - dy) * ((1 - dx) * _Blue(tl) + dx * _Blue(tr)) + dy * ((1 - dx) * _Blue(bl) + dx * _Blue(br)))
+
+ r = r + dz
+ g = g + dz
+ b = b + dz
+
+ If r < 0 Then r = 0
+ If r > 255 Then r = 255
+ If g < 0 Then g = 0
+ If g > 255 Then g = 255
+ If b < 0 Then b = 0
+ If b > 255 Then b = 255
+
+ PSet (x0 + x, y0 - a * 0.707 + y), _RGB(r, g, b)
+ End If
+ Next
+ Next
+
+ _Display
+ _Limit 50
+Loop Until _KeyHit = 27
+
+Sleep
+System
+
+Sub starf (x, y, r, c)
+ Dim i, xx, yy
+ PSet (x + r * Cos(pi / 2), y - r * Sin(pi / 2)), c
+ For i = 0 To 5
+ xx = r * Cos(i * 4 * pi / 5 + pi / 2)
+ yy = r * Sin(i * 4 * pi / 5 + pi / 2)
+ Line -(x + xx, y - yy), c
+ Next
+ Paint (x, y), c
+ For i = 0 To 5
+ xx = r * Cos(i * 4 * pi / 5 + pi / 2) / 2
+ yy = r * Sin(i * 4 * pi / 5 + pi / 2) / 2
+ Paint (x + xx, y - yy), c
+ Next
+End Sub
+
+
diff --git a/samples/art.md b/samples/art.md
index de870fdd..02ba6855 100644
--- a/samples/art.md
+++ b/samples/art.md
@@ -25,3 +25,15 @@ Move mouse to rotate, escape to quit
[🐝 qbguy](qbguy.md) 🔗 [art](art.md), [drawing](drawing.md)
Left-click to draw, right click or middle click to clear screen, escape to quit.
+
+**[Pattern Editor](pattern-editor/index.md)**
+
+[🐝 Abacus](abacus.md) 🔗 [art](art.md), [pattern](pattern.md)
+
+Pattern Editor by Abacus.
+
+**[Tile Engine Test](tile-engine-test/index.md)**
+
+[🐝 Abacus](abacus.md) 🔗 [art](art.md), [tile](tile.md)
+
+Tile Engine Test by Abacus.
diff --git a/samples/author-cloud.md b/samples/author-cloud.md
index a922f9d9..560dfbbb 100644
--- a/samples/author-cloud.md
+++ b/samples/author-cloud.md
@@ -2,4 +2,4 @@
## AUTHORS
-[Microsoft:31](microsoft.md) • [Fellippe Heitor:27](fellippe-heitor.md) • [Antoni Gual:25](antoni-gual.md) • [*missing*:23](author-missing.md) • [STxAxTIC:23](stxaxtic.md) • [Rho Sigma:19](rho-sigma.md) • [qbguy:11](qbguy.md) • [A&A De Pasquale:9](a&a-de-pasquale.md) • [bplus:9](bplus.md) • [Bob Seguin:7](bob-seguin.md) • [Hardin Brothers:5](hardin-brothers.md) • [Relsoft:5](relsoft.md) • [Richard Frost:5](richard-frost.md) • [Terry Ritchie:5](terry-ritchie.md) • [Zom-B:5](zom-b.md) • [Alan Zeichick:3](alan-zeichick.md) • [Ashish Kushwaha:3](ashish-kushwaha.md) • [Cyperium:3](cyperium.md) • [Dav:3](dav.md) • [vince:3](vince.md) • [Artelius:1](artelius.md) • [Brian Murphy:1](brian-murphy.md) • [Chris Chadwick:1](chris-chadwick.md) • [Cobalt:1](cobalt.md) • [Danilin:1](danilin.md) • [darokin:1](darokin.md) • [David Bannon:1](david-bannon.md) • [David Ferrier:1](david-ferrier.md) • [David Joffe:1](david-joffe.md) • [Dietmar Moritz:1](dietmar-moritz.md) • [Douglas Park:1](douglas-park.md) • [Folker Fritz:1](folker-fritz.md) • [Galleon:1](galleon.md) • [Glenn Powell:1](glenn-powell.md) • [harixxx:1](harixxx.md) • [Jeh:1](jeh.md) • [Jeremy Munn:1](jeremy-munn.md) • [JKC:1](jkc.md) • [John Wolfskill:1](john-wolfskill.md) • [Kevin:1](kevin.md) • [kinem:1](kinem.md) • [Leif J. Burrow:1](leif-j.-burrow.md) • [Lucid:1](lucid.md) • [Luke:1](luke.md) • [Matt Bross:1](matt-bross.md) • [Matthew:1](matthew.md) • [Matthew River Knight:1](matthew-river-knight.md) • [Mennonite:1](mennonite.md) • [Michael Fogleman:1](michael-fogleman.md) • [Nathan Thomas:1](nathan-thomas.md) • [Paul Meyer:1](paul-meyer.md) • [pcluddite:1](pcluddite.md) • [Petr:1](petr.md) • [Philipp Strathausen:1](philipp-strathausen.md) • [QB64 Team 2018:1](qb64-team-2018.md) • [RETROQB45:1](retroqb45.md) • [RhoSigma:1](rhosigma.md) • [rpgfan3233:1](rpgfan3233.md) • [Steve M.:1](steve-m..md) • [Timothy Baxendale:1](timothy-baxendale.md) • [Tor Myklebust:1](tor-myklebust.md) • [TrialAndTerror:1](trialandterror.md) • [triggered:1](triggered.md) • [Tsiplacov Sergey:1](tsiplacov-sergey.md) • [TylerDarko:1](tylerdarko.md) • [William Loughner:1](william-loughner.md) • [Yu:1](yu.md) • [Zack Johnson:1](zack-johnson.md)
\ No newline at end of file
+[Microsoft:31](microsoft.md) • [Fellippe Heitor:27](fellippe-heitor.md) • [Antoni Gual:25](antoni-gual.md) • [*missing*:23](author-missing.md) • [STxAxTIC:23](stxaxtic.md) • [Rho Sigma:19](rho-sigma.md) • [Tom Sales:15](tom-sales.md) • [Vince:13](vince.md) • [A&A De Pasquale:11](a&a-de-pasquale.md) • [qbguy:11](qbguy.md) • [bplus:9](bplus.md) • [Abacus:7](abacus.md) • [Bob Seguin:7](bob-seguin.md) • [Hardin Brothers:5](hardin-brothers.md) • [Relsoft:5](relsoft.md) • [Richard Frost:5](richard-frost.md) • [Terry Ritchie:5](terry-ritchie.md) • [Zom-B:5](zom-b.md) • [Alan Zeichick:3](alan-zeichick.md) • [Ashish Kushwaha:3](ashish-kushwaha.md) • [Cyperium:3](cyperium.md) • [Dav:3](dav.md) • [Greg Ennen:3](greg-ennen.md) • [Jon Mark O'Connor:3](jon-mark-o'connor.md) • [Tim Syrop:3](tim-syrop.md) • [Artelius:1](artelius.md) • [Brian Murphy:1](brian-murphy.md) • [Chris Chadwick:1](chris-chadwick.md) • [Cobalt:1](cobalt.md) • [Danilin:1](danilin.md) • [darokin:1](darokin.md) • [David Bannon:1](david-bannon.md) • [David Ferrier:1](david-ferrier.md) • [David Joffe:1](david-joffe.md) • [Dennis Mull:1](dennis-mull.md) • [Dietmar Moritz:1](dietmar-moritz.md) • [Doug Lowe:1](doug-lowe.md) • [Douglas Park:1](douglas-park.md) • [Folker Fritz:1](folker-fritz.md) • [Galleon:1](galleon.md) • [Glenn Powell:1](glenn-powell.md) • [harixxx:1](harixxx.md) • [Jeff Davis:1](jeff-davis.md) • [Jeh:1](jeh.md) • [Jeremy Munn:1](jeremy-munn.md) • [JKC:1](jkc.md) • [John Wolfskill:1](john-wolfskill.md) • [Kevin:1](kevin.md) • [kinem:1](kinem.md) • [Leif J. Burrow:1](leif-j.-burrow.md) • [Lucid:1](lucid.md) • [Luke:1](luke.md) • [Matt Bross:1](matt-bross.md) • [Matthew:1](matthew.md) • [Matthew River Knight:1](matthew-river-knight.md) • [Mennonite:1](mennonite.md) • [Michael Fogleman:1](michael-fogleman.md) • [Nathan Thomas:1](nathan-thomas.md) • [Paul Meyer:1](paul-meyer.md) • [pcluddite:1](pcluddite.md) • [Petr:1](petr.md) • [Philipp Strathausen:1](philipp-strathausen.md) • [QB64 Team 2018:1](qb64-team-2018.md) • [R. K. Fink:1](r.-k.-fink.md) • [RETROQB45:1](retroqb45.md) • [RhoSigma:1](rhosigma.md) • [Rick Ellis:1](rick-ellis.md) • [rpgfan3233:1](rpgfan3233.md) • [Scott Edwards:1](scott-edwards.md) • [Steve M.:1](steve-m..md) • [Timothy Baxendale:1](timothy-baxendale.md) • [Tor Myklebust:1](tor-myklebust.md) • [TrialAndTerror:1](trialandterror.md) • [triggered:1](triggered.md) • [Tsiplacov Sergey:1](tsiplacov-sergey.md) • [TylerDarko:1](tylerdarko.md) • [William Loughner:1](william-loughner.md) • [Yu:1](yu.md) • [Zack Johnson:1](zack-johnson.md)
\ No newline at end of file
diff --git a/samples/bezier.md b/samples/bezier.md
new file mode 100644
index 00000000..35ca1860
--- /dev/null
+++ b/samples/bezier.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: BEZIER
+
+**[Curve Approximator](curve-approximator/index.md)**
+
+[🐝 Vince](vince.md) 🔗 [curve](curve.md), [bezier](bezier.md)
+
+Curve Approximator by Vince.
diff --git a/samples/big-leds/img/screenshot.png b/samples/big-leds/img/screenshot.png
new file mode 100644
index 00000000..6f6f45de
Binary files /dev/null and b/samples/big-leds/img/screenshot.png differ
diff --git a/samples/big-leds/index.md b/samples/big-leds/index.md
new file mode 100644
index 00000000..de66cbaa
--- /dev/null
+++ b/samples/big-leds/index.md
@@ -0,0 +1,107 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: BIG LEDS
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Scott Edwards](../scott-edwards.md)
+
+### Description
+
+```text
+' BIG_LEDS.BAS
+' by Scott Edwards
+' Copyright (C) 1994 DOS World Magazine
+' Published in Issue #19, January 1995, page 62
+
+*****************************************************************************
+
+ BIG_LEDS.BAS
+ by Scott Edwards
+ Copyright (C) 1994 DOS World Magazine
+ Published in Issue #19, January 1995, page 62
+
+If you've ever wanted your QBasic programs to display GIANT numbers on your
+display, this program is for you. BIG_LEDS.BAS demonstrates the usage of two
+subroutines, DISPLAY and LED, that display large numbers that look like the
+LED display on a digital clock or wrist watch. The demo program displays a
+four-digit value as it counts from zero to 9999, updating the display once
+per second. You can stop the demo at any time by pressing any key.
+To run the program from the DOS command line, change to the directory
+containing BIG_LEDS.BAS, then type:
+
+QBASIC /RUN BIG_LEDS
+
+
+Like a real LED (light emitting diode) display, each numeral displayed by
+this program consists of seven segments, each of which can be on or off. The
+number 8, for example. uses all seven segments:
+
+ ****
+ * *
+ * *
+ ****
+ * *
+ * *
+ ****
+
+The DISPLAY subroutine extracts the digits of the number you want to display,
+converts it to a bit pattern and feeds it to the LED subroutine. The LED
+subroutine turns each segment on or off according to the pattern of bits
+provided in the integer variable SEGS%.
+
+The demo program's main loop consists of just five lines:
+
+FOR X = 0 TO 9999
+ DISPLAY (X): SLEEP 1
+ IF INKEY$ <> "" THEN SYSTEM
+NEXT X
+END
+
+This FOR...NEXT loop counts from 0 to 9999 and calls the DISPLAY subroutine
+each time through the loop. If you press any key, the program exits back to
+the QBasic environment.
+
+You may customize the program by changing the values of the constants that
+set the color, size, and screen position of the LED numerals. The constant
+SCALE controls the spacing of the numerals. Only four values are useful:
+1(small), 2(medium), 3(huge), and 4(jumbo). If you change SCALE, you must
+also change the "Sn" value for constants A$ through G$. If you set SCALE to
+1, for instance, the line that sets the value of A$ must be changed to:
+
+CONST A$ = "S1 B M+0,-242 B R4 E8 R80 F8 G8 L80 H8 B R10"
+
+In this example, S4 was changed to S1 because SCALE was changed from 4 to 1.
+
+You may change the color of the numerals by altering the value of the
+constant LIT. Values of 1 through 15 are permissible. To change the location
+at which the numerals are displayed, substitute new values for the constants
+XBASE and YBASE. Reducing XBASE moves the display to the left, increasing it
+moves the display to the right. Reducing YBASE moves the display up,
+increasing it moves the display down.
+
+To use these routines in a program of your own, add the entire BIG_LEDS.BAS
+listing to your program, except for the five lines shown above that comprise
+the main program loop of the demo program. The easiest way to do this is to
+Open BIG_LEDS.BAS in QBasic, Copy the relevant portions of the listing, Open
+your program, and Paste the copied portion of BIG_LEDS.BAS into your program.
+Now anytime you want to display a BIG number, insert the statement Display
+(X) into your program, after first setting X equal to the number you wish to
+display.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "big_leds.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/big-leds/src/big_leds.bas)
+* [RUN "big_leds.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/big-leds/src/big_leds.bas)
+* [PLAY "big_leds.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/big-leds/src/big_leds.bas)
+
+### File(s)
+
+* [big_leds.bas](src/big_leds.bas)
+
+🔗 [clock](../clock.md), [dos world](../dos-world.md)
diff --git a/samples/big-leds/src/big_leds.bas b/samples/big-leds/src/big_leds.bas
new file mode 100644
index 00000000..b597c243
--- /dev/null
+++ b/samples/big-leds/src/big_leds.bas
@@ -0,0 +1,91 @@
+' BIG_LEDS.BAS
+' by Scott Edwards
+' Copyright (C) 1994 DOS World Magazine
+' Published in Issue #19, January 1995, page 62
+
+
+DECLARE SUB DISPLAY (THEVALUE%)
+DECLARE SUB LED (XORIGIN%, YORIGIN%, SEGS%)
+DEFINT A-Z
+SCREEN 12: CLS
+
+CONST SCALE = 4
+CONST OFFSET = 35 * SCALE
+
+'DECODE() holds the patterns of LEDs that form the digits zero to 9.
+DIM SHARED DECODE(10) AS INTEGER
+
+'These string constants hold instructions used by the DRAW command
+'to draw the segments of the LED displays. The names A through G
+'are consistent with the labeling for LED displays.
+'
+'Because QBasic allows simple math, but not string manipulation,
+'in calculating CONST values, you must manually adjust the scale
+'values to match that used in the constant SCALE, above.
+CONST A$ = "S4 B M+0,-242 B R4 E8 R80 F8 G8 L80 H8 B R10"
+CONST B$ = "S4 B M+104,-123 H8 U100 E8 F8 D100 G8 B U10"
+CONST C$ = "S4 B M+104,0 H8 U100 E8 F8 D100 G8 B U10"
+CONST D$ = "S4 B M+0,+4 B R4 E8 R80 F8 G8 L80 H8 B R10"
+CONST E$ = "S4 H8 U100 E8 F8 D100 G8 B U10"
+CONST F$ = "S4 B M+0,-123 H8 U100 E8 F8 D100 G8 B U10"
+CONST G$ = "S4 B M+0,-120 B R4 E8 R80 F8 G8 L80 H8 B R10"
+
+CONST LIT = 4 'Color of LEDs.
+CONST UNLIT = 0 'Color of LEDs when off.
+CONST XBASE = 60 'Position in pixels from left edge of screen.
+CONST YBASE = 300 'Position in pixels from top of screen.
+
+'Sets up the array DECODE() with the LED segment patterns for zero
+'through 9.
+FOR I = 0 TO 9: READ DECODE(I): NEXT I
+
+'Main program loop. Substitute your own routines here.
+FOR X = 0 TO 9999
+ DISPLAY (X): SLEEP 1
+ IF INKEY$ <> "" THEN SYSTEM
+NEXT X
+END
+
+'The data for the DECODE() array.
+DATA 63, 6, 91, 79, 102, 109, 125, 7, 127, 111
+
+'Given a value between zero and 9999, this subroutine prepares data
+'that the LED soubroutine needs to display the digits on the screen.
+SUB DISPLAY (THEVALUE%)
+
+ONES = DECODE(THEVALUE MOD 10): THEVALUE = THEVALUE \ 10
+TENS = DECODE(THEVALUE MOD 10): THEVALUE = THEVALUE \ 10
+HUNDREDS = DECODE(THEVALUE MOD 10): THEVALUE = THEVALUE \ 10
+THOUSANDS = DECODE(THEVALUE MOD 10): THEVALUE = THEVALUE \ 10
+LED (XBASE + OFFSET * 3), (YBASE), (ONES)
+LED (XBASE + OFFSET * 2), (YBASE), (TENS)
+LED (XBASE + OFFSET), (YBASE), (HUNDREDS)
+LED (XBASE), (YBASE), (THOUSANDS)
+
+END SUB
+
+'Given an x,y position on the screen, and an integer representing the
+'segments to turn on or off, this subroutine draws one LED digit on
+'the screen. The integer SEGS% may be any value between zero and 127,
+'but only the values supplied by DECODE() will look like actual
+'numbers.
+SUB LED (XORIGIN%, YORIGIN%, SEGS%)
+
+LITUP$ = STR$(LIT)
+DARK$ = STR$(UNLIT)
+LOCON$ = "B M" + STR$(XORIGIN%) + "," + STR$(YORIGIN%) + " C" + LITUP$
+LOCOFF$ = "B M" + STR$(XORIGIN%) + "," + STR$(YORIGIN%) + " C" + DARK$
+
+FILL$ = "P" + LITUP$ + "," + LITUP$
+BLANK$ = "P" + DARK$ + "," + DARK$
+
+IF SEGS% AND 1 THEN DRAW LOCON$ + A$ + FILL$ ELSE DRAW LOCOFF$ + A$ + BLANK$
+IF SEGS% AND 2 THEN DRAW LOCON$ + B$ + FILL$ ELSE DRAW LOCOFF$ + B$ + BLANK$
+IF SEGS% AND 4 THEN DRAW LOCON$ + C$ + FILL$ ELSE DRAW LOCOFF$ + C$ + BLANK$
+IF SEGS% AND 8 THEN DRAW LOCON$ + D$ + FILL$ ELSE DRAW LOCOFF$ + D$ + BLANK$
+IF SEGS% AND 16 THEN DRAW LOCON$ + E$ + FILL$ ELSE DRAW LOCOFF$ + E$ + BLANK$
+IF SEGS% AND 32 THEN DRAW LOCON$ + F$ + FILL$ ELSE DRAW LOCOFF$ + F$ + BLANK$
+IF SEGS% AND 64 THEN DRAW LOCON$ + G$ + FILL$ ELSE DRAW LOCOFF$ + G$ + BLANK$
+
+END SUB
+
diff --git a/samples/bomber/img/screenshot.png b/samples/bomber/img/screenshot.png
new file mode 100644
index 00000000..0b9bc1cf
Binary files /dev/null and b/samples/bomber/img/screenshot.png differ
diff --git a/samples/bomber/index.md b/samples/bomber/index.md
new file mode 100644
index 00000000..143e219c
--- /dev/null
+++ b/samples/bomber/index.md
@@ -0,0 +1,181 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: BOMBER
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Doug Lowe](../doug-lowe.md)
+
+### Description
+
+```text
+' BOMBER.BAS by Doug Lowe
+' Copyright (C) 1994 DOS Resource Guide. Sept. 1994 issue, page 58
+
+*****************************************************************************
+
+ BOMBER.BAS
+ by Doug Lowe
+ Copyright (C) 1994 DOS Resource Guide
+ Published in Issue #17, September 1994, page 58
+
+Remember that scene in Raiders of the Lost Ark where Indiana Jones works his
+way cautiously across the room to retrieve a priceless artifact--while
+carefully avoiding the booby-trapped floor tiles? One wrong step and he's
+history.
+
+This QBasic program, Mad Bomber, works on a similar premise. Hidden within a
+10-by-10-square playing field are 15 bombs. Your job is to pinpoint the
+location of each one without "stepping" on any of them. If you keep your
+head, you'll come out a winner, but make one mistake and the game's up.
+
+To run the program from the DOS command line, change to the directory
+containing BOMBER.BAS, then type:
+
+QBASIC /RUN BOMBER
+
+
+BOMBER.BAS starts by clearing the screen and drawing the playing field. To
+play the game, you uncover squares on the grid one by one, using the arrow
+keys to move to a particular square and highlight it. If you don't think the
+highlighted square contains a bomb, press the Enter key to reveal its
+contents; press the spacebar to mark a square as the site of a bomb.
+
+Play continues until you press F10 to quit the game, press F2 to begin a new
+round of Mad Bomber, pinpoint correctly the locations of all 15 bombs, or
+press Enter on a square within which a bomb is hidden.
+
+As you uncover squares that don't contain bombs, the game rewards you with
+clues. A blank square indicates that the eight squares surrounding the empty
+one (three above, three below, and one on either side) are free of bombs. A
+numeral (1 through 8) tells you the number of bombs housed in the eight
+surrounding squares.
+
+For example, if you uncover a square containing a 2, you know that two of the
+surrounding eight squares hold bombs and six don't. The trick, of course, is
+figuring out which of the surrounding squares contain the bombs. To win
+you'll need to rely on old-fashioned deductive reasoning, with an occasional
+calculated risk and a bit of luck.
+
+The results of your first few moves depend on chance. In fact, because 15 of
+the 100 squares contain bombs, there's a roughly 1:15 chance that you'll lose
+the game on your first move. If your luck holds and you uncover two or three
+squares successfully, you should accumulate enough clues to begin pinpointing
+bombs and uncovering empty squares.
+
+But beware: The game lets you mark as many squares as you want. A counter in
+the bar at the bottom of the screen tells you the number of bombs remaining
+unmarked.
+
+The counter starts at 15 and is decremented by one each time you mark a
+square, even if you mark it incorrectly. (If you realize you've made a
+mistake, you may unmark a square by highlighting it and pressing Enter
+again.) If you mark more than 15 squares, the counter displays a negative
+number.
+
+If you're lucky (or smart) enough to uncover a square with no adjacent bombs,
+the program uncovers all eight surrounding squares automatically. If any of
+those new squares have no adjacent bombs, those squares are uncovered, as
+well. Sometimes, a lucky move will uncover half the grid, providing numerous
+clues to the locations of the remaining bombs.
+
+To win the game, you must uncover all 85 empty squares. To up the pressure, a
+timer starts counting off seconds as soon as you uncover your first square.
+You'll know you're good when you can win a round of Mad Bomber in about 45
+seconds. (If you're acquainted with Windows 3.1, you may recognize the
+similarities between the rules for Mad Bomber and those for Minesweeper, one
+of the free games that comes with Windows.)
+
+Program Highlights
+------------------
+Two arrays are used to track the playing grid. The first, GRID, contains the
+contents of each grid square: A number from zero to 8 indicates the number of
+bombs adjacent to the square, and a value of 9 indicates that the square
+contains a bomb. The second array, SHOW, keeps track of whether you've
+uncovered or marked a square.
+
+Both arrays are defined as 12-by-12 matrices, even though the game field is
+only a 10-by-10 matrix. The outer edge of each array (all cells in row zero
+and row 11 and all cells in column zero and column 11) is ignored. This
+design simplifies the logic of the subprogram InitializeGame, particularly
+the section that counts the number of bombs adjacent to each cell within the
+playing field. Had GRID been defined as a 10-by-10 matrix, the program would
+need additional boundary checks throughout that routine.
+
+In addition to drawing the game board, the subprogram InitializeGame
+randomizes the location of the 15 bombs, then, based on bomb placement,
+calculates the number (zero to 8) to store in the other cells of the grid.
+ShowGridItem displays a particular grid square. If the player uncovers the
+square, this routine displays the square's contents. If the player marks the
+cell, it displays the mark; otherwise, it displays a block to indicate that
+the player hasn't uncovered or marked the square. The third parameter passed
+to this subprogram, mode, helps determine which color to display in the
+square. If the value of mode is 1, the colors are inverted, which highlights
+the square.
+
+The program's most interesting routine is ShowNeighbors, a subprogram called
+whenever the player uncovers a blank square. ShowNeighbors first uncovers all
+eight adjacent squares (assuming that the square doesn't lie on the edge of
+the grid). If one of the neighboring cells is also blank, the subprogram
+calls itself and uncovers another set of neighboring cells. This technique,
+called recursion, isn't used commonly in QBasic programs. But in this case,
+it's the most efficient way to uncover empty squares.
+
+Making It Better
+----------------
+If you want to tinker with QBasic, Mad Bomber offers several do-it-yourself
+opportunities. The first of these home-improvement projects--increasing the
+level of difficulty by increasing the number of bombs--is simple, because a
+CONST statement is used to establish the number of bombs. As noted above, the
+program as written hides 15 bombs. To increase the number of bombs,
+substitute a higher value in the CONST statement near the beginning of the
+program. For example, if you change the CONST statement to read as follows:
+
+CONST NUMBOMBS = 20
+
+the program hides 20 bombs within the playing field.
+
+There are three other obvious enhancements to Mad Bomber. First, you could
+track high scores by writing outcomes to a file. Second, you could allow the
+player to vary the size of the grid. Finally, you might investigate ways to
+eliminate the 1:15 chance of losing on the first move.
+
+Keeping track of the best scores would mean storing the highest ones in a
+file, which entails adding statements to open the file, reading the previous
+best score, comparing it with the current player's score, and updating the
+file with new information if the player beats the previous best score. In
+addition, you'd want to add a routine that displays a congratulatory message
+and asks for the player's name, which you'd show on screen beside the score.
+
+Increasing the size of the playing field would involve extensive changes to
+the routines in InitializeGame that draw the board and randomize it, as well
+as modifications to the routines that move that little cursor around the
+screen. Because each square on the grid requires three display lines and five
+display columns, a 10-by-10 matrix is about the largest game board you can
+create with the screen in 25-line mode. To create a larger board, you'd have
+to switch the display to 43-line mode.
+
+And to eliminate the possibility of uncovering a bomb right off the bat, you
+could rewrite the program so that it randomizes the grid after the first
+move.
+
+All these changes would improve the program, but none of them is absolutely
+essential--you'll still get plenty of hours of playing fun running Mad Bomber
+just as it is.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "bomber.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/bomber/src/bomber.bas)
+* [RUN "bomber.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/bomber/src/bomber.bas)
+* [PLAY "bomber.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/bomber/src/bomber.bas)
+
+### File(s)
+
+* [bomber.bas](src/bomber.bas)
+
+🔗 [game](../game.md), [dos world](../dos-world.md)
diff --git a/samples/bomber/src/bomber.bas b/samples/bomber/src/bomber.bas
new file mode 100644
index 00000000..834f0777
--- /dev/null
+++ b/samples/bomber/src/bomber.bas
@@ -0,0 +1,231 @@
+DECLARE SUB ShowNeighbors (x, y)
+DECLARE SUB ShowGridItem (x!, y!, mode)
+DECLARE SUB PlayGame ()
+DECLARE SUB InitializeGame ()
+
+' BOMBER.BAS by Doug Lowe
+' Copyright (C) 1994 DOS Resource Guide. Sept. 1994 issue, page 58
+
+CLS : SCREEN 0
+DIM SHARED Grid(11, 11) ' 0-8 = adjacent bombs; 9=bomb
+DIM SHARED Show(11, 11) ' 0 = hidden 1 = exposed 2 = marked
+DIM SHARED OpenX ' Number of squares currently revealed
+DIM SHARED FirstMove, StartTime
+RANDOMIZE TIMER
+CALL InitializeGame
+EndGame = 0
+OpenX = 0
+Marks = 0
+x = 1: y = 1: CALL ShowGridItem(x, y, 1)
+DO
+ COLOR 8, 3
+ DO: in$ = INKEY$
+ IF FirstMove = 0 THEN
+ LOCATE 19, 68: PRINT USING "###"; TIMER - StartTime;
+ END IF
+ LOOP WHILE in$ = ""
+ IF in$ = CHR$(13) THEN 'Enter to reveal square
+ IF FirstMove = 1 THEN
+ StartTime = TIMER
+ FirstMove = 0
+ END IF
+ Show(x, y) = 1
+ CALL ShowGridItem(x, y, 1)
+ IF Grid(x, y) = 9 THEN
+ COLOR 8, 3
+ FOR x = 1 TO 10: FOR y = 1 TO 10
+ Show(x, y) = 1
+ CALL ShowGridItem(x, y, 0)
+ NEXT y: NEXT x
+ COLOR 15, 4: BEEP
+ LOCATE 5, 58: PRINT "ͻ";
+ LOCATE 6, 58: PRINT " ";
+ LOCATE 7, 58: PRINT " Bummer! ";
+ LOCATE 8, 58: PRINT " ";
+ LOCATE 9, 58: PRINT " You Lost. ";
+ LOCATE 10, 58: PRINT " ";
+ LOCATE 11, 58: PRINT " Press a key ";
+ LOCATE 12, 58: PRINT " to begin ";
+ LOCATE 13, 58: PRINT " a new game. ";
+ LOCATE 14, 58: PRINT " ";
+ LOCATE 15, 58: PRINT "ͼ";
+ DO: LOOP UNTIL INKEY$ <> ""
+ CALL InitializeGame
+ x = 1: y = 1: CALL ShowGridItem(x, y, 1)
+ OpenX = 0: Marks = 0
+
+ ELSE
+ OpenX = OpenX + 1
+ IF Grid(x, y) = 0 THEN
+ CALL ShowNeighbors(x, y)
+ CALL ShowGridItem(x, y, 1)
+ END IF
+ IF OpenX = 88 THEN
+ COLOR 15, 1: BEEP
+ LOCATE 5, 58: PRINT "ͻ";
+ LOCATE 6, 58: PRINT " ";
+ LOCATE 7, 58: PRINT " Excellent! ";
+ LOCATE 8, 58: PRINT " ";
+ LOCATE 9, 58: PRINT " You Won. ";
+ LOCATE 10, 58: PRINT " ";
+ LOCATE 11, 58: PRINT " Press a key ";
+ LOCATE 12, 58: PRINT " to begin ";
+ LOCATE 13, 58: PRINT " a new game. ";
+ LOCATE 14, 58: PRINT " ";
+ LOCATE 15, 58: PRINT "ͼ";
+ DO: LOOP UNTIL INKEY$ <> ""
+ CALL InitializeGame
+ x = 1: y = 1: CALL ShowGridItem(x, y, 1)
+ OpenX = 0: Marks = 0
+ END IF
+ END IF
+ ELSEIF in$ = " " THEN 'Space to mark square
+ IF Show(x, y) = 0 THEN
+ Show(x, y) = 2: Marks = Marks + 1
+ ELSEIF Show(x, y) = 2 THEN
+ Show(x, y) = 0: Marks = Marks - 1
+ END IF
+ COLOR 8, 3: LOCATE 25, 77: PRINT USING "###"; 12 - Marks;
+ CALL ShowGridItem(x, y, 1)
+ ELSEIF LEN(in$) = 2 THEN
+ SELECT CASE RIGHT$(in$, 1)
+ CASE CHR$(77) 'Right arrow
+ CALL ShowGridItem(x, y, 0)
+ IF x < 10 THEN x = x + 1
+ CALL ShowGridItem(x, y, 1)
+ CASE CHR$(75) 'Left arrow
+ CALL ShowGridItem(x, y, 0)
+ IF x > 1 THEN x = x - 1
+ CALL ShowGridItem(x, y, 1)
+ CASE CHR$(72) 'Up arrow
+ CALL ShowGridItem(x, y, 0)
+ IF y > 1 THEN y = y - 1
+ CALL ShowGridItem(x, y, 1)
+ CASE CHR$(80) 'Down arrow
+ CALL ShowGridItem(x, y, 0)
+ IF y < 10 THEN y = y + 1
+ CALL ShowGridItem(x, y, 1)
+ CASE CHR$(60) 'F2
+ CALL InitializeGame
+ x = 1: y = 1: CALL ShowGridItem(x, y, 1)
+ OpenX = 0
+ CASE CHR$(68) 'F10
+ COLOR 7, 0: CLS
+ SYSTEM
+ CASE ELSE
+ END SELECT
+ END IF
+LOOP UNTIL EndGame = 1
+
+SUB InitializeGame
+COLOR 7, 0: CLS
+COLOR 10: LOCATE 1, 23: PRINT "M A D B O M B E R"
+COLOR 8, 3
+LOCATE 2, 10: PRINT " ͻ ";
+FOR x = 3 TO 19 STEP 2
+LOCATE x, 10: PRINT " ";
+LOCATE x + 1, 10: PRINT " Ķ ";
+NEXT x
+LOCATE 21, 10: PRINT " ";
+LOCATE 22, 10: PRINT " ͼ ";
+
+FOR x = 0 TO 11: FOR y = 0 TO 11: Grid(x, y) = 0: NEXT y: NEXT x
+FOR Bomb = 1 TO 12
+ BombPlaced = 0
+ DO: x = INT(RND * 10 + 1): y = INT(RND * 10 + 1)
+ IF Grid(x, y) = 0 AND Grid(x, y) <> 11 THEN
+ Grid(x, y) = 9
+ BombPlaced = 1
+ END IF
+ LOOP UNTIL BombPlaced = 1
+NEXT Bomb
+FOR x = 1 TO 10: FOR y = 1 TO 10
+ IF Grid(x, y) = 0 THEN
+ Count = 0
+ IF Grid(x - 1, y - 1) = 9 THEN Count = Count + 1
+ IF Grid(x, y - 1) = 9 THEN Count = Count + 1
+ IF Grid(x + 1, y - 1) = 9 THEN Count = Count + 1
+ IF Grid(x - 1, y) = 9 THEN Count = Count + 1
+ IF Grid(x + 1, y) = 9 THEN Count = Count + 1
+ IF Grid(x - 1, y + 1) = 9 THEN Count = Count + 1
+ IF Grid(x, y + 1) = 9 THEN Count = Count + 1
+ IF Grid(x + 1, y + 1) = 9 THEN Count = Count + 1
+ Grid(x, y) = Count
+ END IF
+ Show(x, y) = 0
+NEXT y: NEXT x
+
+'Show grid
+FOR x = 1 TO 10: FOR y = 1 TO 10
+ CALL ShowGridItem(x, y, 0)
+NEXT y: NEXT x
+LOCATE 25, 1: PRINT STRING$(80, " "); : LOCATE 25, 1
+PRINT " F2 = New Game F10 = Quit Enter = Reveal Space = Mark";
+LOCATE 25, 66: PRINT "Bombs left: 12";
+LOCATE 18, 61: PRINT " ";
+LOCATE 19, 61: PRINT " Time: ";
+LOCATE 20, 61: PRINT " ";
+FirstMove = 1
+END SUB
+
+SUB ShowGridItem (x, y, mode)
+ IF mode = 1 THEN COLOR 3, 8 ELSE COLOR 8, 3
+ SELECT CASE Show(x, y)
+ CASE 0
+ LOCATE (y - 1) * 2 + 3, (x - 1) * 4 + 12
+ PRINT "";
+ CASE 1
+ LOCATE (y - 1) * 2 + 3, (x - 1) * 4 + 12
+ IF Grid(x, y) = 9 THEN
+ COLOR 12: PRINT " * ";
+ ELSEIF Grid(x, y) > 0 THEN
+ PRINT STR$(Grid(x, y)) + " ";
+ ELSE
+ PRINT " ";
+ END IF
+ CASE 2
+ IF mode = 1 THEN COLOR 3, 12 ELSE COLOR 12, 3
+ LOCATE (y - 1) * 2 + 3, (x - 1) * 4 + 12
+ PRINT " = ";
+ CASE ELSE
+ END SELECT
+END SUB
+
+SUB ShowNeighbors (x, y)
+COLOR 8, 3
+IF Grid(x, y) = 0 AND Show(x, y) = 1 THEN
+ IF y > 1 AND x > 1 THEN
+ x1 = x - 1: y1 = y - 1: GOSUB Neighbor
+ END IF
+ IF y > 1 THEN
+ x1 = x: y1 = y - 1: GOSUB Neighbor
+ END IF
+ IF y > 1 AND x < 10 THEN
+ x1 = x + 1: y1 = y - 1: GOSUB Neighbor
+ END IF
+ IF x > 1 THEN
+ x1 = x - 1: y1 = y: GOSUB Neighbor
+ END IF
+ IF x < 10 THEN
+ x1 = x + 1: y1 = y: GOSUB Neighbor
+ END IF
+ IF y < 10 AND x > 1 THEN
+ x1 = x - 1: y1 = y + 1: GOSUB Neighbor
+ END IF
+ IF y < 10 THEN
+ x1 = x: y1 = y + 1: GOSUB Neighbor
+ END IF
+ IF y < 10 AND x < 10 THEN
+ x1 = x + 1: y1 = y + 1: GOSUB Neighbor
+ END IF
+END IF
+EXIT SUB
+Neighbor:
+ IF Show(x1, y1) = 0 THEN
+ Show(x1, y1) = 1: OpenX = OpenX + 1
+ CALL ShowGridItem(x1, y1, 0)
+ IF Grid(x1, y1) = 0 THEN CALL ShowNeighbors(x1, y1)
+ END IF
+ RETURN
+END SUB
+
diff --git a/samples/bubbles/img/screenshot.png b/samples/bubbles/img/screenshot.png
new file mode 100644
index 00000000..d7c8fd17
Binary files /dev/null and b/samples/bubbles/img/screenshot.png differ
diff --git a/samples/bubbles/index.md b/samples/bubbles/index.md
new file mode 100644
index 00000000..fee02227
--- /dev/null
+++ b/samples/bubbles/index.md
@@ -0,0 +1,38 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: BUBBLES
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Tom Sales](../tom-sales.md)
+
+### Description
+
+```text
+Copyright (C) 1994-95 DOS Resource Guide/DOS World
+Published in Issue #17, September 1994, page 66 and
+ Issue #20, March 1995, page 64
+
+It takes clever programming indeed to create an
+interesting one-line program. You'll be amazed at
+how much can be accomplished.
+
+BUBBLES.BAS displays a changing array of colored circles that bubble toward
+the top of the screen.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "bubbles.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/bubbles/src/bubbles.bas)
+* [RUN "bubbles.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/bubbles/src/bubbles.bas)
+* [PLAY "bubbles.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/bubbles/src/bubbles.bas)
+
+### File(s)
+
+* [bubbles.bas](src/bubbles.bas)
+
+🔗 [screensaver](../screensaver.md), [dos world](../dos-world.md), [254 chars](../254-chars.md)
diff --git a/samples/bubbles/src/bubbles.bas b/samples/bubbles/src/bubbles.bas
new file mode 100644
index 00000000..41c16953
--- /dev/null
+++ b/samples/bubbles/src/bubbles.bas
@@ -0,0 +1,2 @@
+SCREEN 12: DO: R = RND * 30 + 3: CIRCLE (RND * 640, 430), R, RND * 16 + 1: LOCATE 30, 1: PRINT : SOUND R * 50, 1: LOOP
+
diff --git a/samples/clock.md b/samples/clock.md
index 2a3d9fa4..24ded47a 100644
--- a/samples/clock.md
+++ b/samples/clock.md
@@ -2,6 +2,12 @@
## SAMPLES: CLOCK
+**[Big LEDs](big-leds/index.md)**
+
+[🐝 Scott Edwards](scott-edwards.md) 🔗 [clock](clock.md), [dos world](dos-world.md)
+
+' BIG_LEDS.BAS ' by Scott Edwards ' Copyright (C) 1994 DOS World Magazine ' Published in Issue #1...
+
**[Mini Clock](mini-clock/index.md)**
[🐝 Folker Fritz](folker-fritz.md) 🔗 [clock](clock.md), [desktop](desktop.md)
diff --git a/samples/curve-approximator/img/screenshot.png b/samples/curve-approximator/img/screenshot.png
new file mode 100644
index 00000000..ffd06391
Binary files /dev/null and b/samples/curve-approximator/img/screenshot.png differ
diff --git a/samples/curve-approximator/index.md b/samples/curve-approximator/index.md
new file mode 100644
index 00000000..28550b4f
--- /dev/null
+++ b/samples/curve-approximator/index.md
@@ -0,0 +1,29 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: CURVE APPROXIMATOR
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Vince](../vince.md)
+
+### Description
+
+```text
+Curve Approximator by Vince.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "contour1.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/curve-approximator/src/contour1.bas)
+* [RUN "contour1.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/curve-approximator/src/contour1.bas)
+* [PLAY "contour1.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/curve-approximator/src/contour1.bas)
+
+### File(s)
+
+* [contour1.bas](src/contour1.bas)
+
+🔗 [curve](../curve.md), [bezier](../bezier.md)
diff --git a/samples/curve-approximator/src/contour1.bas b/samples/curve-approximator/src/contour1.bas
new file mode 100644
index 00000000..ddfd2004
--- /dev/null
+++ b/samples/curve-approximator/src/contour1.bas
@@ -0,0 +1,165 @@
+deflng a-z
+
+const sw = 800
+const sh = 600
+
+dim shared pi as double
+pi = 4*atn(1)
+
+n = 0
+redim x(n), y(n)
+
+r = 20
+
+
+screen _newimage(sw, sh, 32),,0,0
+_screenmove 0.5*(1920 - sw), 0.5*(1080 - sh)
+
+do
+ do while _mouseinput
+ mw = mw + _mousewheel
+ loop
+ mx = _mousex
+ my = _mousey
+ mb = _mousebutton(1)
+
+
+ if mb = -1 then
+ n = 1
+ redim _preserve x(n)
+ redim _preserve y(n)
+
+ mx = _mousex
+ my = _mousey
+
+ x(0) = mx - sw/2
+ y(0) = sh/2 - my
+
+ pset (mx, my)
+ do while mb = -1
+ do while _mouseinput
+ loop
+ mx = _mousex
+ my = _mousey
+ mb = _mousebutton(1)
+
+ line -(mx, my)
+
+ if (mx - omx)^2 + (my - omy)^2 > r*r then
+ circle (mx, my), 3
+ omx = mx
+ omy = my
+
+ x(n) = mx - sw/2
+ y(n) = sh/2 - my
+ n = n + 1
+ redim _preserve x(n)
+ redim _preserve y(n)
+ end if
+ _display
+ loop
+
+ 'close the contour
+ x(n) = x(0)
+ y(n) = y(0)
+ n = n + 1
+ redim _preserve x(n)
+ redim _preserve y(n)
+
+ 'redraw spline frame
+ screen ,,1,0
+ cls
+ pset (sw/2 + x(0), sh/2 - y(0)), _rgb(100,0,0)
+ for i=0 to n-1
+ line -(sw/2 + x(i), sh/2 - y(i)), _rgb(100,0,0)
+ circle step(0, 0), 3, _rgb(100,0,0)
+ next
+
+ 'draw bezier curve
+ dim as double bx, by, bin, t
+
+ pset (sw/2 + x(0), sh/2 - y(0)), _rgb(255,0,0)
+ for t=0 to 1 step 0.01
+ bx = 0
+ by = 0
+
+ for i=0 to n-1
+ bin = 1
+ for j=1 to i
+ bin = bin*(n - j)/j
+ next
+
+ bx = bx + bin*((1 - t)^(n - 1 - i))*(t^i)*x(i)
+ by = by + bin*((1 - t)^(n - 1 - i))*(t^i)*y(i)
+ next
+ line -(sw/2 + bx, sh/2 - by), _rgb(255,0,0)
+ next
+ 'close
+ line -(sw/2 + x(0), sh/2 - y(0)), _rgb(255,0,0)
+
+ 'screen ,,0,0
+ 'pcopy 1,0
+ '_display
+
+ 'animate derivative vector
+ dim as double dx, dy
+
+ screen ,,0,0
+
+ do
+ for t=0 to 1 step 0.01
+ pcopy 1,0
+
+ bx = 0
+ by = 0
+
+ dx = 0
+ dy = 0
+ for i=0 to n-1
+ bin = 1
+ for j=1 to i
+ bin = bin*(n - j)/j
+ next
+ bx = bx + bin*((1 - t)^(n - 1 - i))*(t^i)*x(i)
+ by = by + bin*((1 - t)^(n - 1 - i))*(t^i)*y(i)
+
+ dx = dx + bin*((1 - t)^(n - 2 - i))*(t^(i - 1))*(i - (n)*t + t)*x(i)
+ dy = dy + bin*((1 - t)^(n - 2 - i))*(t^(i - 1))*(i - (n)*t + t)*y(i)
+ next
+
+ circlef sw/2 + bx, sh/2 - by, 3, _rgb(255,255,0)
+ line (sw/2 + bx, sh/2 - by)-step(1*dx, -1*dy), _rgb(255,255,0)
+
+ _display
+ _limit 30
+
+ if _keyhit = 27 then exit do
+ next
+ loop
+
+ cls
+ end if
+
+ _limit 50
+loop until _keyhit = 27
+system
+
+sub circlef(x, y, r, c)
+ x0 = r
+ y0 = 0
+ e = -r
+ do while y0 < x0
+ if e <= 0 then
+ y0 = y0 + 1
+ line (x - x0, y + y0)-(x + x0, y + y0), c, bf
+ line (x - x0, y - y0)-(x + x0, y - y0), c, bf
+ e = e + 2*y0
+ else
+ line (x - y0, y - x0)-(x + y0, y - x0), c, bf
+ line (x - y0, y + x0)-(x + y0, y + x0), c, bf
+ x0 = x0 - 1
+ e = e - 2*x0
+ end if
+ loop
+ line (x - r, y)-(x + r, y), c, bf
+end sub
diff --git a/samples/curve.md b/samples/curve.md
index e8a5f474..4d4136de 100644
--- a/samples/curve.md
+++ b/samples/curve.md
@@ -2,6 +2,12 @@
## SAMPLES: CURVE
+**[Curve Approximator](curve-approximator/index.md)**
+
+[🐝 Vince](vince.md) 🔗 [curve](curve.md), [bezier](bezier.md)
+
+Curve Approximator by Vince.
+
**[Curve Smoother](curve-smoother/index.md)**
[🐝 STxAxTIC](stxaxtic.md) [🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [curve](curve.md), [interpolation](interpolation.md)
diff --git a/samples/dennis-mull.md b/samples/dennis-mull.md
new file mode 100644
index 00000000..cb7c94dd
--- /dev/null
+++ b/samples/dennis-mull.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DENNIS MULL
+
+**[Madness](madness/index.md)**
+
+[🐝 Dennis Mull](dennis-mull.md) 🔗 [game](game.md), [dos world](dos-world.md)
+
+***************************************************************************** MADNESS.BAS ...
diff --git a/samples/dialog-demo-box/img/screenshot.png b/samples/dialog-demo-box/img/screenshot.png
new file mode 100644
index 00000000..d5d2c944
Binary files /dev/null and b/samples/dialog-demo-box/img/screenshot.png differ
diff --git a/samples/dialog-demo-box/index.md b/samples/dialog-demo-box/index.md
new file mode 100644
index 00000000..c442a594
--- /dev/null
+++ b/samples/dialog-demo-box/index.md
@@ -0,0 +1,29 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: DIALOG DEMO BOX
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Abacus](../abacus.md)
+
+### Description
+
+```text
+Dialog Demo Box by Abacus.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "ch13_12.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/dialog-demo-box/src/ch13_12.bas)
+* [RUN "ch13_12.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/dialog-demo-box/src/ch13_12.bas)
+* [PLAY "ch13_12.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/dialog-demo-box/src/ch13_12.bas)
+
+### File(s)
+
+* [ch13_12.bas](src/ch13_12.bas)
+
+🔗 [gui](../gui.md), [dialog](../dialog.md)
diff --git a/samples/dialog-demo-box/src/ch13_12.bas b/samples/dialog-demo-box/src/ch13_12.bas
new file mode 100644
index 00000000..b6ef7269
--- /dev/null
+++ b/samples/dialog-demo-box/src/ch13_12.bas
@@ -0,0 +1,1249 @@
+REM Programming Combined Panels
+REM \CHAP13\CH13_12.BAS
+
+DECLARE SUB Answer (X0, Y0, LX, MaxLText, Text$, NumberText$)
+DECLARE SUB Box (Row1%, Col1%, row2%, Col2%)
+DECLARE SUB BoxDouble (Row1%, Col1%, row2%, Col2%)
+DECLARE SUB ChoiceFields ()
+DECLARE SUB ControlPanel ()
+DECLARE SUB DemoText ()
+DECLARE SUB FieldOpToSelect (RowField%, ColField%)
+DECLARE SUB FileToProject (MaxRow%, Row1%, Col1%, RowField%, ColField%)
+DECLARE SUB FileToSelect (MaxRow%, Row1%, Col1%, RowField%, ColField%)
+DECLARE SUB Initialize ()
+DECLARE SUB InitProject ()
+DECLARE SUB InitSelect ()
+DECLARE SUB PrintConditionals (CurRow%, CurCol%)
+DECLARE SUB PrintMenuMain (Titl$(), Max%, Row1%, Col1%)
+DECLARE SUB PrintMultiChoice (Tit$, Titl$(), Max%, Row1%, Col1%, BitPos%())
+DECLARE SUB PrintWindow (Titl$(), Max%, RowH%, Row1%, Col1%)
+DECLARE SUB PopUpWindow (Row1%, Coll1%, row2%, Coll2%)
+DECLARE SUB PosMultiChoice (Tit$, Titl$(), Max%, Row1%, Col1%, BitPos%())
+DECLARE SUB ResultProject ()
+DECLARE SUB ResultSelect ()
+DECLARE SUB SortAndOther ()
+
+DECLARE FUNCTION MaxLen% (Array$(), MaxCol%)
+DECLARE FUNCTION Number (Txt$)
+DECLARE FUNCTION PosChoice% (Titl1$, Titl$(), Max%, Row1%, Col1%, CurPos%)
+DECLARE FUNCTION PosMenuMain% (Titl$(), Max%, Row1%, Col1%, CurPos%)
+DECLARE FUNCTION PosMenuWin% (Titl$(), Max%, Row1%, Col1%, CurPos%)
+
+CONST TRUE = -1
+CONST FALSE = NOT TRUE
+
+DIM SHARED HelpMenu$(10)
+DIM SHARED MenuW$(13), Menu$(13), PosFd%(13)
+DIM SHARED ChoiFd$(20), ChoiceF$(20), ChoicOp$(20)
+DIM SHARED PosFlds(3), PosOprs(3), Values$(3)
+DIM SHARED PosFld%, PosOp%, PosF%, PosM%, PosW%
+DIM SHARED MaxPos%, Key$, Titl1$, Titl2$, Titl3$
+DIM SHARED Color1, Color2, Color3
+DIM SHARED NumChoice, FinishMenu, FinishWindow
+
+'F1 activates a pop-up help window
+ON KEY(1) GOSUB F1help
+KEY(1) ON
+
+Initialize 'Initialize program
+ControlPanel 'This is the main program
+END
+
+F1help:
+'Activation of the pop-up help window
+'parameters - coordinates of the window
+ PopUpWindow 11, 21, 21, 61
+ RETURN
+
+SUB Answer (X0, Y0, LX, MaxLText, Text$, NumberText$)
+' *******************************************
+' * Entering a number or a character string *
+' *******************************************
+' NumberText$ = "Number" - entering number
+' NumberText$ = "Text" - entering text
+' X0, Y0 - coordinates of start of entry zone
+' LX - length of entry zone ( LX <= MaxLText )
+' MaxLText - maximal length of the string to enter
+' Text$ - result of entry
+
+CI = 14 'color of display
+CB = 1 'color background
+GOSUB Init
+GOSUB OnScreen
+DO
+ DO
+ L$ = INKEY$
+ LOOP WHILE L$ = ""
+ SELECT CASE L$
+ CASE CHR$(0) + CHR$(82) 'Ins
+ GOSUB Insert
+ CASE CHR$(0) + CHR$(83) 'Del
+ GOSUB Delete
+ CASE CHR$(0) + CHR$(75) 'Cursor-left
+ GOSUB CursorLeft
+ CASE CHR$(0) + CHR$(77) 'Cursor-right
+ GOSUB CursorRight
+ CASE CHR$(0) + CHR$(71) 'Home
+ GOSUB Home
+ CASE CHR$(0) + CHR$(79) 'End
+ GOSUB End1
+ CASE CHR$(8) 'BackSpace
+ GOSUB BackSpace
+ CASE CHR$(13), CHR$(9) 'Enter, Tab
+ IF NumberText$ = "Text" THEN
+ Text$ = RTRIM$(Text$)
+ LOCATE , , , 7
+ EXIT DO
+ ELSE
+ GOSUB EnterNumber
+ IF Number(Text$) = TRUE THEN
+ LOCATE , , , 7
+ EXIT DO
+ END IF
+ END IF
+ CASE CHR$(32) TO CHR$(255) 'Characters
+ GOSUB AddSymbol
+ CASE ELSE
+ BEEP
+ END SELECT
+LOOP
+EXIT SUB
+'===========================================================
+Init:
+' *** Initialization of procedure ***
+ COLOR CI, CB
+ LOCATE X0, Y0
+ Text$ = SPACE$(MaxLText)
+ PointerB = 1
+ PointerC = 1
+ Ins = FALSE
+RETURN
+'===========================================================
+AddSymbol:
+' *** Add character to string Text$ ***
+ NL = PointerB + PointerC - 1
+ SELECT CASE Ins
+ CASE TRUE 'insertion mode
+ IF RIGHT$(Text$, 1) <> " " THEN
+ BEEP
+ PointerC = PointerC - 1
+ ELSE
+ IF NL = MaxLText THEN
+ MID$(Text$, NL) = L$
+ ELSE
+ TL$ = LEFT$(Text$, NL - 1)
+ TR$ = MID$(Text$, NL, MaxLText - NL)
+ Text$ = LEFT$(TL$ + L$ + TR$, MaxLText)
+ END IF
+ END IF
+ CASE FALSE 'replacement mode
+ IF PointerC <= LX THEN
+ MID$(Text$, NL) = L$
+ ELSE
+ BEEP
+ END IF
+ END SELECT
+ GOSUB CursorRight
+ GOSUB OnScreen
+RETURN
+'===========================================================
+Cursor:
+' *** Change position of cursor ***
+SELECT CASE Crsr$
+ CASE "right" 'move cursor right
+ IF PointerC < LX THEN
+ PointerC = PointerC + 1
+ ELSE
+ IF PointerB + PointerC - 1 < MaxLText THEN
+ PointerB = PointerB + 1
+ ELSE
+ IF PointerC = LX THEN
+ '*** cursor at end of word Text$ ***
+ PointerC = PointerC + 1
+ ELSE
+ BEEP
+ END IF
+ END IF
+ END IF
+ CASE "left" 'move cursor left
+ IF PointerC > 1 THEN
+ PointerC = PointerC - 1
+ ELSE
+ IF PointerB > 1 THEN
+ PointerB = PointerB - 1
+ ELSE 'cursor at the beginning of word Text$
+ BEEP
+ END IF
+ END IF
+END SELECT
+RETURN
+'==========================================================
+OnScreen:
+' *** Output text fragment and cursor onto screen ***
+ COLOR CI, CB
+ LOCATE X0, Y0
+ PRINT MID$(Text$, PointerB, LX);
+ IF PointerC <= LX THEN
+ NL = PointerB + PointerC - 1
+ LOCATE X0, Y0 + PointerC - 1, 1
+ ELSE
+ LOCATE , , 0 'hide cursor
+ END IF
+RETURN
+'===========================================================
+Insert:
+' *** Change value of Ins and the form of cursor ***
+ IF Ins = TRUE THEN
+ Ins = FALSE
+ LOCATE X0, Y0, , 7
+ ELSE
+ Ins = TRUE
+ LOCATE X0, Y0, , 0, 7
+ END IF
+ GOSUB OnScreen
+RETURN
+'===========================================================
+CursorLeft:
+' *** Move cursor left ***
+ Crsr$ = "left"
+ GOSUB Cursor
+ GOSUB OnScreen
+RETURN
+'===========================================================
+CursorRight:
+' *** Move cursor right ***
+ Crsr$ = "right"
+ GOSUB Cursor
+ GOSUB OnScreen
+ RETURN
+'===========================================================
+BackSpace:
+' *** Delete a character to the left from cursor ***
+ NL = PointerB + PointerC - 1
+ IF NL > 1 THEN
+ TL$ = LEFT$(Text$, NL - 2)
+ TR$ = RIGHT$(Text$, MaxLText - NL + 1)
+ Text$ = TL$ + TR$ + " "
+ GOSUB CursorLeft
+ GOSUB OnScreen
+ ELSE
+ BEEP
+ END IF
+RETURN
+'===========================================================
+Delete:
+' *** Delete a character at cursor ***
+ NL = PointerB + PointerC - 1
+ IF PointerC <= LX THEN
+ TL$ = LEFT$(Text$, NL - 1)
+ TR$ = RIGHT$(Text$, MaxLText - NL)
+ Text$ = TL$ + TR$ + " "
+ GOSUB OnScreen
+ ELSE
+ BEEP
+ END IF
+RETURN
+'===========================================================
+Home:
+' *** Move cursor to the beginning of string ***
+ PointerB = 1
+ PointerC = 1
+ GOSUB OnScreen
+RETURN
+'===========================================================
+End1:
+' *** Move cursor to end of string ***
+ LTxt = LEN(RTRIM$(Text$))
+ SELECT CASE LTxt
+ CASE IS < LX
+ PointerB = 1
+ PointerC = LTxt + 1
+ CASE IS = MaxLText
+ PointerB = MaxLText - LX + 1
+ PointerC = LX
+ CASE IS >= LX
+ PointerB = LTxt - LX + 2
+ PointerC = LX
+ END SELECT
+ GOSUB OnScreen
+RETURN
+'===========================================================
+EnterNumber:
+' *** Complete entering number ***
+ IF Number(Text$) = FALSE THEN
+ PCOPY 0, 1
+ X3 = 12: Y3 = 11
+ 'CALL Box(X3 + 1, Y3 + 1, X3 + 4, Y3 + 19, 4, 0, 4)
+ 'CALL Box(X3, Y3, X3 + 3, Y3 + 18, 2, 15, 5)
+ 'CALL Box(X3 + 1, Y3 + 1, X3 + 2, Y3 + 17, 4, 5, 15)
+ COLOR 31, 5
+ LOCATE 13, 18
+ PRINT "Error!"
+ COLOR 15, 5
+ LOCATE 14, 12
+ PRINT " Enter a number! "
+ L$ = INPUT$(1)
+ PCOPY 1, 0
+ GOSUB OnScreen
+ ELSE
+ Text$ = RTRIM$(Text$)
+ END IF
+RETURN
+'===========================================================
+
+
+END SUB
+
+SUB Box (Row1%, Col1%, row2%, Col2%) STATIC
+'Box:
+' Draw a box on the screen between the given coordinates.
+
+ BoxWidth = Col2% - Col1% + 1
+
+ LOCATE Row1%, Col1%
+ PRINT ""; STRING$(BoxWidth - 2, ""); "";
+
+ FOR a = Row1% + 1 TO row2% - 1
+ LOCATE a, Col1%
+ PRINT ""; SPACE$(BoxWidth - 2); "";
+ NEXT a
+
+ LOCATE row2%, Col1%
+ PRINT ""; STRING$(BoxWidth - 2, ""); "";
+
+
+END SUB
+
+SUB BoxDouble (Row1%, Col1%, row2%, Col2%) STATIC
+'BoxDouble:
+' Draw a box on the screen between the given coordinates.
+
+ BoxWidth = Col2% - Col1% + 1
+
+ LOCATE Row1%, Col1%
+ PRINT ""; STRING$(BoxWidth - 2, ""); "";
+
+ FOR a = Row1% + 1 TO row2% - 1
+ LOCATE a, Col1%
+ PRINT ""; SPACE$(BoxWidth - 2); "";
+ NEXT a
+
+ LOCATE row2%, Col1%
+ PRINT ""; STRING$(BoxWidth - 2, ""); "";
+
+END SUB
+
+SUB ChoiceFields
+ SELECT CASE PosF%
+ CASE 1
+ChoiFd$(0) = "Liner"
+ChoiFd$(1) = "YearOfLaunch"
+ChoiFd$(2) = "Dockyard"
+ChoiFd$(3) = "Country"
+ChoiFd$(4) = "Town"
+ChoiFd$(5) = "ShipOwningCo"
+MaxPos% = 6
+ CASE 2
+ChoiFd$(0) = "Liner"
+ChoiFd$(1) = "Year"
+ChoiFd$(2) = "Direct"
+ChoiFd$(3) = "Days"
+ChoiFd$(4) = "Hours"
+ChoiFd$(5) = "Minutes"
+ChoiFd$(6) = "Velocity"
+MaxPos% = 7
+ CASE 3
+ChoiFd$(0) = "Liner"
+ChoiFd$(1) = "YearOfLaunch"
+ChoiFd$(2) = "Dockyard"
+ChoiFd$(3) = "Country"
+ChoiFd$(4) = "Town"
+ChoiFd$(5) = "ShipOwningCo"
+ChoiFd$(6) = "Year"
+ChoiFd$(7) = "Direct"
+ChoiFd$(8) = "Days"
+ChoiFd$(9) = "Hours"
+ChoiFd$(10) = "Minutes"
+ChoiFd$(11) = "Velocity"
+ChoiFd$(12) = ""
+ChoiFd$(13) = ""
+MaxPos% = 12
+ END SELECT
+
+END SUB
+
+SUB ControlPanel
+'Managing main menu and dialog window.
+
+ 'Set Select for demonstration.
+ PosM% = 3
+ FinishMenu = FALSE
+
+ 'Cycle of activization of main menu and of corresponding dialog window
+ DO
+ DemoText
+ PosM% = PosMenuMain(Menu$(), 7, 2, 7, PosM%)
+ IF FinishMenu = TRUE THEN EXIT DO
+ FinishWindow = FALSE
+ SELECT CASE PosM%
+ CASE 3
+ InitSelect
+
+ 'Cycle of activization of selection fields and of window menu Select
+ DO
+ 'Selection of file name
+ FileToSelect 3, 11, 6, 7, 4
+ IF FinishWindow = TRUE THEN EXIT DO
+ 'specifying several conditions for this file
+ DO
+ FieldOpToSelect 7, 4
+ PosW% = PosMenuWin(MenuW$(), 3, 21, 3, PosW%)
+ IF FinishWindow = TRUE THEN EXIT DO
+ SELECT CASE PosW%
+ CASE 1
+ PosW% = 1
+ CASE 2
+ '"Plug" for the command Select.
+ ResultSelect
+ FinishWindow = TRUE: EXIT DO
+ CASE 3
+ FinishWindow = TRUE: EXIT DO
+ CASE 4
+ PosW% = 1: EXIT DO
+ END SELECT
+ LOOP
+ IF FinishWindow = TRUE THEN EXIT DO
+ LOOP
+ CASE 5
+ InitProject
+ DO
+ FileToProject 3, 8, 10, 7, 28
+ IF FinishWindow = TRUE THEN EXIT DO
+ SELECT CASE PosW%
+ CASE 1
+ '"Plug" for the command roject.
+ ResultProject
+ EXIT DO
+ CASE 2
+ EXIT DO
+ CASE 3
+ PosW% = 1
+ END SELECT
+ LOOP
+ CASE 7
+ EXIT DO
+ CASE ELSE
+ '"Plug" for Edit, Sort, Print.
+ SortAndOther
+ END SELECT
+ LOOP
+
+END SUB
+
+SUB DemoText
+'Display of framework of dialog window with reference information
+ DIM X$(20)
+
+ 'Output of external framework of window
+ COLOR Color2, Color3
+ BoxDouble 1, 1, 25, 80
+ COLOR Color1, Color2
+ LOCATE 1, 30
+ PRINT " Demo Dialog Box "
+ 'Framework of help window
+ Box 7, 18, 21, 62
+
+ X$(1) = "This is a demonstration program of working"
+ X$(2) = "with dialog windows of data base "
+ X$(3) = " BLUE RIBBON OF ATLANTIC "
+ X$(4) = "Windows for two commands "
+ X$(5) = "