(TXT) View source
       
       # 2025-07-14 - OCC FreeBASIC, QBASIC.EXE, and WM Tweaks
       
       I can't believe i forgot to install curl!  Fixed.
       
       * * *
       
       Alpine Linux does not include a GUI mixer applet with XFCE.
       I fussed around with various options and finally settled on
       launching alsamixer like so:
       
       * Right click panel
       * Click Panel>
       * Click Panel Preferences...
       * Click Items
       * Click +Add
       * Click Launcher
       * Click +Add
       * Click Close
       * Move Launcher below Power Manager Plugin
       * Click Wrench icon
       * Click +
       * Scroll to bottom
       * Select st
       * Click +Add
       * Click Close
       * In Launcher window, click Wrench icon
       * Replace values
       * Name: Mixer
       * Comment: alsamixer
       * Command: alsamixer
       * Click Icon
       * Select audio-volume-high
       * Click OK
       * Check box at Run in terminal
       * Click Save
       
       Now i have a speaker icon in my tray that i can click to open
       alsamixer. While i was at it, i set up XFCE key bindings to
       adjust the audio volume.  I would have used multimedia buttons, but
       my keyboard doesn't have any.
       
       * Click Applications
       * Click Settings
       * Click Keyboard
       * Click Application Shortcuts
       * Click +Add
       * Command: amixer set Master toggle
       * Click OK
       * Press: Win 0
       * Click +Add
       * Command: amixer set Master 5%-
       * Click OK
       * Press: Win -
       * Click +Add
       * Command: amixer set Master 5%+
       * Click OK
       * Press: Win =
       
       That creates the following key bindings:
       
       * Win 0  Mute or unmute
       * Win -  Volume down
       * Win =  Volume up
       
       * * *
       
       audacious with the winamp / refugee theme looks exactly like xmms.
       Yet another refugee from blackbox and xmms. :)
       
       * * *
       
       I noticed that gnumeric on this old hardware is considerably snappier
       than libreoffice on my new hardware.  I might want to consider
       switching to gnumeric on my main machine.
       
       * * *
       
       I decided to go on a nostalgia trip and type in some BASIC listings.
       I installed QBASIC.EXE and FreeBASIC in DOSBox-staging. I selected
       the following book to type listings from.
       
 (HTM) Programming Tricks And Skills
       
       This book discusses various programming tips and tricks relevant to
       8-bit computers when they all shipped with BASIC built-in.  The book
       concludes with a BASIC listing for a simple CRUD application that
       will run on all the major 8-bit computers, including models with
       only 32KB RAM.  It can save the database to file, floppy, or tape.
       Quite an accomplishment back in the day.
       
 (TXT) CRUD
       
       Specific lines in the main listing are marked by platform.  After
       the listing, each platform has a section of replacement lines.  I
       selected the TRS-80 variant and ported the code to QBASIC.EXE,
       then FreeBASIC.
       
       Pages 33 and 34 discusses micro-optimizations in program layout
       that were relevant to the limitations of 8-bit computers.  This
       helps explain the horrendous formatting of some old BASIC code.
       See the following excerpt for wisdom from a more innocent era.
       
           More about memory
           =================
           
           Most home computers have between about 32K and 48K of RAM and
           this is [massive] for even quite long programs.  Some of the
           RAM, though, is always used by the computer for housekeeping
           tasks, that is, for storing information it needs while it
           carries out the program.  This can take up to 3K and reduces the
           space available for the program itself.
           
           Also, in high resolution graphics modes, most computers need
           much more RAM space for storing graphics information.  In the
           highest resolution mode this can be up to 20K, which might only
           leave you about 10K for the program.
           
           The largest memory an eight-bit computer ... can have, is
           64K ROM and RAM combined.  This is because each location in the
           memory has to have a number as its address.  Each address is
           represented by two bytes of computer code and the highest number
           that can be made with two bytes (16 bits) is 65536.  This allows
           65536 locations numbered 0 through 65536, which is 64K
           (65536 / 1024).
           
           It is possible, though, to use more memory on an eight-bit
           computer by switching in different blocks of memory at different
           times.  You can buy memory expansion units to do this.
       
       # Reference materials
       
 (HTM) More TRS-80 BASIC
       
 (HTM) Personal Computer BASIC Reference Manual (TRS-80)
       
 (DIR) FreeBASIC
       
 (DIR) QBASIC.EXE (See help section)
       
       I discovered a corner case with QBASIC.EXE line number support.
       
       For example, the original code has:
       
           1280 DIM C$(MX*CL)
       
       I translated this to:
       
           1280 DIM C(MX*CL) AS STRING
       
       QBASIC.EXE throws the following error:
       
       > AS clause required on first declaration
       >
       > A variable that has not been delcared using an AS clause is
       > referred to with an AS clause.
       
       The same error happens if i use the REDIM statement. This took a
       little detective work to decipher.  If i change the line to:
       
           1280 CLS:PRINT UBOUND(C$):END
       
       Then it prints that a 10 item array already exists.  But i never
       declared or used it before line 1280.  My theory is that this is an
       internal compiler artifact. I think QBASIC.EXE implicitly declares
       C$ as a 10 item array here:
       
           10 GOSUB 1260: REM INITIALIZATION
       
       I worked around it by copying lines 1270, 80, and 90 to lines
       7, 8, and 9.  Then i commented out the original lines.
       
       In other words, make sure DIM statements come *before* any GOSUB.
       
       After adapting the code to run in QBASIC.EXE, i didn't need to
       change much for FreeBASIC.  I commented out line 6 CLEAR and added a
       third parameter ",0" to my LOCATE statements to hide the cursor.
       Then i can compile with `fbc -lang qb FLIP.BAS`
       
 (TXT) FLIP.BAS
       
       tags: occ2025,retrocomputing
       
       # Tags
       
 (DIR) occ2025
 (DIR) retrocomputing