Files
gw-basic-2026/tests/programs/mbf_binary_roundtrip.bas
Eremey Valetov 3f3104c385 Implement MBF binary file compatibility, fix binary loader null-byte truncation, update to v0.14.0
Binary tokenized SAVE/LOAD now stores float constants in Microsoft Binary
Format (MBF) on disk, matching original GWBASIC.EXE.  A token-walking function
(convert_floats) converts IEEE↔MBF at the save_binary()/load_binary() boundary.

Also fixes a latent bug where load_binary() scanned for 0x00 to find the end
of each token line — this fails when float bytes contain null (e.g. MBF for
100.5 is 00 00 49 87).  The loader now uses the next-line pointer to compute
token data length, matching the original's approach.
2026-03-21 01:38:53 -04:00

22 lines
1.0 KiB
QBasic

10 REM MBF binary save/load round-trip test
20 REM Creates a program with float constants, saves binary, loads back
30 REM Uses a flag file to detect second run and break the loop
40 OPEN "gwbasic_mbfrt_inner.bas" FOR OUTPUT AS #1
50 PRINT #1, "10 PRINT 3.14"
60 PRINT #1, "20 PRINT -100.5"
70 PRINT #1, "30 PRINT 2.71828#"
80 PRINT #1, "40 ON ERROR GOTO 100"
90 PRINT #1, "50 OPEN "+CHR$(34)+"gwbasic_mbfrt_flag"+CHR$(34)+" FOR INPUT AS #1"
100 PRINT #1, "60 CLOSE #1"
110 PRINT #1, "70 KILL "+CHR$(34)+"gwbasic_mbfrt_flag"+CHR$(34)
120 PRINT #1, "80 KILL "+CHR$(34)+"gwbasic_mbfrt_bin.bas"+CHR$(34)
130 PRINT #1, "90 END"
140 PRINT #1, "100 RESUME 110"
150 PRINT #1, "110 OPEN "+CHR$(34)+"gwbasic_mbfrt_flag"+CHR$(34)+" FOR OUTPUT AS #1"
160 PRINT #1, "120 CLOSE #1"
170 PRINT #1, "130 SAVE "+CHR$(34)+"gwbasic_mbfrt_bin.bas"+CHR$(34)
180 PRINT #1, "140 KILL "+CHR$(34)+"gwbasic_mbfrt_inner.bas"+CHR$(34)
190 PRINT #1, "150 LOAD "+CHR$(34)+"gwbasic_mbfrt_bin.bas"+CHR$(34)+",R"
200 CLOSE #1
210 LOAD "gwbasic_mbfrt_inner.bas",R