- build_dos.sh: Linux-friendly cross-compile to DOS via OpenWatcom V2.
OpenWatcom's wmake on Linux can't apply the .c.obj implicit rule for
subdirectory paths, and Makefile.dos / Makefile.dos16 rely on DOS-
only commands like 'del'. Script invokes wcc / wcc386 directly,
tracks 16-bit vs 32-bit mode via a stamp file (auto-cleans on
switch), generates a wlink directive file (the brace-delimited file
list wouldn't survive shell quoting), and supports clean. The DOS
Makefiles still work on Windows / DOS hosts.
- tests/run_compiler_tests.sh: AOT compiler harness. For each .bas
in tests/programs/, compiles via gwbasic-compile -c, runs the
resulting executable, normalizes output and diffs against the
golden file from tests/expected/. Skip list covers chain/common
multi-file flows, hardware/timing-dependent programs, unnumbered
direct-mode programs (compiler requires line numbers), and
misc_stmts/run_file (interpreter-vs-compiler ON ERROR divergence).
Result: 56/56 pass.
- tests/run_dos_smoke.sh + dos_smoke.bas + expected: runs gwbasic16.exe
under DOSBox-X (flatpak) with a program that exercises arithmetic,
strings, control flow, GOSUB, FOR/NEXT, DATA/READ, DEF FN, OPEN/
PRINT#/CLOSE, and diffs against the interpreter's golden output.
Uses $HOME for the staging dir (DOSBox-X flatpak doesn't see /tmp).
- pkg/GWBASIC.LSM + pkg/build_pkg.sh: FreeDOS submission package.
Produces dist/gwbasic-<VERSION>.zip with the standard FreeDOS
layout (APPINFO/GWBASIC.LSM, BIN/GWBASIC.EXE, DOC/GWBASIC/{README,
CHANGES,LICENSE} with CRLF, SOURCE/GWBASIC/<full source>). Source
tree is filtered through git ls-files to exclude build artifacts.
- docs/Makefile: standard Sphinx Makefile so 'cd docs && make html'
works as documented in README.md.
- .github/workflows/ci.yml: split into two jobs. build-and-test now
also runs the compiler harness. New dos-cross-compile job caches
~/openwatcom-v2, downloads the OpenWatcom V2 snapshot if not
cached, builds both 16-bit and 32-bit DOS binaries, asserts size
bounds, and uploads them as artifacts.
- .gitignore: ignore .dos_build_mode (script's stamp), .link_dir/
(transient wlink directive dir), dist/ (package output).
52 lines
1.3 KiB
QBasic
52 lines
1.3 KiB
QBasic
10 REM DOS smoke test for gwbasic16.exe -- exercises arithmetic, strings,
|
|
20 REM control flow, GOSUB, FOR/NEXT, DATA/READ, file I/O, MID$ assignment.
|
|
30 REM Output is captured via OPEN/PRINT# so the host can compare against
|
|
40 REM tests/expected/dos_smoke.expected.
|
|
50 OPEN "O",#1,"OUT.TXT"
|
|
60 REM --- 1. Arithmetic
|
|
70 PRINT #1, "ARITH"
|
|
80 PRINT #1, 2+2*3
|
|
90 PRINT #1, (2+2)*3
|
|
100 PRINT #1, 100\3, 100 MOD 3
|
|
110 PRINT #1, 2^10
|
|
120 REM --- 2. Strings
|
|
130 PRINT #1, "STRINGS"
|
|
140 A$ = "HELLO" + " " + "WORLD"
|
|
150 PRINT #1, A$
|
|
160 PRINT #1, LEN(A$); LEFT$(A$,5); RIGHT$(A$,5); MID$(A$,7,5)
|
|
170 MID$(A$,7,5) = "BASIC"
|
|
180 PRINT #1, A$
|
|
190 REM --- 3. Control flow
|
|
200 PRINT #1, "CONTROL"
|
|
210 FOR I = 1 TO 5
|
|
220 PRINT #1, "FOR"; I
|
|
230 NEXT I
|
|
240 J = 0
|
|
250 WHILE J < 3
|
|
260 J = J + 1
|
|
270 PRINT #1, "WHILE"; J
|
|
280 WEND
|
|
290 GOSUB 1000
|
|
300 REM --- 4. DATA/READ
|
|
310 PRINT #1, "DATA"
|
|
320 RESTORE 900
|
|
330 FOR K = 1 TO 4
|
|
340 READ X
|
|
350 PRINT #1, "X="; X
|
|
360 NEXT K
|
|
370 REM --- 5. DEF FN
|
|
380 PRINT #1, "DEFFN"
|
|
390 DEF FN SQUARE(N) = N*N
|
|
400 PRINT #1, FN SQUARE(7)
|
|
410 PRINT #1, FN SQUARE(13)
|
|
420 REM --- 6. Conditionals
|
|
430 PRINT #1, "IF"
|
|
440 IF 5 > 3 THEN PRINT #1, "T1"
|
|
450 IF 5 < 3 THEN PRINT #1, "F1" ELSE PRINT #1, "T2"
|
|
460 PRINT #1, "DONE"
|
|
470 CLOSE #1
|
|
480 END
|
|
900 DATA 10, 20, 30, 40
|
|
1000 PRINT #1, "GOSUB OK"
|
|
1010 RETURN
|