Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : MMBasic for Windows - betas
Page 15 of 30 | |||||
Author | Message | ||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
Don't think it is exactly the same bug and is all wrapped up in the problems with feof/ftell In order for ftell to work I need to fflush before calling it. However, if I fflush when a file is opened but nothing has been written it seems to cause a problem. I really don't want to have to special case this everywhere. If you write before the eof call then it all works. Seems like a bug in stdlib to me. Calling fflush should be completely benign. |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Just in case we are talking at cross-purposes, the build I downloaded on 11th April "passes" all my MMBasic file I/O integration tests (perhaps some of the values returned by EOF are "wrong" but no unexpected errors are reported.) The build I downloaded this morning fails one of those same tests with the error I reported. So apparently you've made a change to fix something I wasn't aware of (didn't have an integration-test for) and "broken" something I did have an integration-test for (strictly speaking it was a test for something else that just happened to catch the change). I'm not offering judgement (this business of calling EOF when writing a file is the very edge of an edge condition), just clarifying in case my bug report was misunderstood. Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
Please try the attached MMBasic.zip Might be OK or might have broken lots by introducing another special case |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
MMBasic.zip Might be OK or might have broken lots by introducing another special case Sorry Peter, EOF seems to be borked now: > list "eof_bug.bas" Option Console Both f$ = "new_file.txt" On Error Skip Kill f$ Open f$ For Output As #1 Print #1, "Hello World" Close #1 Open f$ For Input As #1 Line Input #1, s$ Print s$ Print Eof(#1) ' Prints 1 on CMM2 and earlier versions of MMB4W Close #1 > run "eof_bug.bas" Hello World 0 Also you've left a diagnostic in that is printing "Flush" to the console. Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
Forgot the special case within the special case MMBasic.zip |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Improving: > list "eof_bug.bas" Option Console Both Dim f$ = "new_file.txt" On Error Skip Kill f$ Print "This is 1 on the CMM2: " Eof(#0) Open f$ For Output As #1 Print "This is 1 on the CMM2: " Eof(#1) Print #1, "Hello World" Print "This is 1 on the CMM2: " Eof(#1) Close #1 Kill f$ Open f$ For Append As #1 Print "This is 1 on the CMM2: " Eof(#1) Print #1, "Hello World" Print "This is 1 on the CMM2: " Eof(#1) Close #1 > run "eof_bug.bas" This is 1 on the CMM2: 0 This is 1 on the CMM2: 1 This is 1 on the CMM2: 0 This is 1 on the CMM2: 1 This is 1 on the CMM2: 1 You might just want to check this on an actual CMM2 as I don't have one here with me and am extrapolating its behaviour from my integration tests. Also note there is no guarantee my integration tests are comprehensive - infact I give you a cast iron guarantee that they are not! Best wishes, Tom Edited 2022-04-22 00:28 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
V5.07.03b10 MMBasic.zip Hopefully fixes the various issue found by Tom |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
It appears to, thank you. Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
Pluto Guru Joined: 09/06/2017 Location: FinlandPosts: 359 |
V5.07.03b10: Running a testing program "Graftest.bas". OK Trying to save a copy of the program as "Graftest2.bas". NOK Program stored in the default MMBasic directory. I am probably doing some stupid mistake. Need advice. /Fred |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
SAVE is not implemented as it has no logical use. Files are saved when exiting the editor or when using autosave. For your use you can use the copy command or the "save as" in the editor (ctrl-W) NB - doesn't exist on CMM2 either as both implementations are "disk-based" Edited 2022-04-27 17:34 by matherp |
||||
Pluto Guru Joined: 09/06/2017 Location: FinlandPosts: 359 |
Thanks for the rapid reply! I was confused by the MMBasic DOS/Windows Version User Manual MMBasic Ver 5.05.05 p.24. Maybe some clarifying note could be added in a future manual. (Hopefully I have the newest manual in use?) |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
There is no manual for the windows version of MMbasic - it is on the to-do list. The nearest is the CMM2 manual but ignore the I/O commands and functions |
||||
lizby Guru Joined: 17/05/2016 Location: United StatesPosts: 3150 |
MMBasic DOS (which has a manual) is different from MMBasic for Windows. PicoMite, Armmite F4, SensorKits, MMBasic Hardware, Games, etc. on fruitoftheshed |
||||
disco4now Guru Joined: 18/12/2014 Location: AustraliaPosts: 897 |
I have a Windows 10 laptop with Intel HD 530 graphics card. MMB4W has always been displayed strangely, (top line under window title, first character half off the screen) Variations of this with the different modes, only mode -16 really worked properly. I finally update the driver for the graphics card from the Intel site and now its all good!!! Hope windows update doesn't downgrade it. Latest F4 Latest H7 |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Hi Peter, I'm back on MMB4W for a couple of days, here's a bug for you that I'm suprised I didn't notice previously: Observe that the hyphens passed from the prompt are not handled correctly (I'm guessing they are being converted into tokens), but those passed via EXECUTE are. I vaguely recollect that the CMM2 had the same issue but that you kindly fixed it for me. Best wishes, Tom Edited 2022-06-03 19:28 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
And here is another one for you: Observe the spurious newline that has been inserted as a result of throwing and skipping an ERROR. Best wishes, Tom Edited 2022-06-03 19:56 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9128 |
Will fix first , the second is too obscure to waste time on - sorry |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Pretty please . I believe the offending line is in Commands.cpp: void cmd_error(void) { char* s, p[STRINGSIZE]; if (*cmdline && *cmdline != '\'') { s = (char *)getCstring(cmdline); if (CurrentX != 0) MMPrintString((char*)"\r\n"); // <<<<<<<<<< strcpy(p, s); error(p); } else error((char *)""); } IMO cmd_error() should not be printing anything directly, that should ony be occurring in the implementation of error() and even then only if not skipping errors. Apologies that I can't fix/build/test myself and send you a patch. My Windoze machine requires an older Visual Studio tool-chain installed for the purposes of my dayjob and I'm not accomplished enough with the Windoze tools to get MMB4W building with it. Best wishes, Tom Edited 2022-06-03 22:08 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Good morning Peter, Two more bugs/issues/observations. I suspect they are both also present on the CMM2 and the second issue may be endemic to MMBasic: Issue 1 - fun with the pipe character > list "pipe-bug.bas" Print "Hello World" Print "Goodbye|World" : Error "foo" > run "pipe-bug.bas" Hello World Goodbye|World Error in line 0: foo and if you now start the EDITor it will have inserted a "line 0" into the file and then misbehave because it doesn't expect a line 0. This happens because the | character has a special meaning in the tokenised form of MMBasic for MMB4W/MMB4L/CMM2 where it is used to delimit statement(s) from the metadata identifying the file/line they were sourced from. Suggested remediation: - Either, use strrchr() to search for the | character in reverse in the tknbuf. - Or, ignore | chars in double-quotes when searching the tknbuf. All bets are off if a .inc filename has the | character in it. Issue 2 - fun with the DATA statement Found this whilst trying to put quotation marks into a string in a DATA statement. > list "data-bug.bas" Dim i%, f!, s1$, s2$, s3$ Read i% : Print "i%" i% Read f! : Print "f!" f! Read s1$ : Print "s1$: '" s1$ "'" Read s2$ : Print "s2$: '" s2$ "'" Read s3$ : Print "s3$: '" s3$ "'" Data 1 + 1, 3.0 + 0.142, wombat, "" + Chr$(34) + "foo", Chr$(34) + "bar" > run i% 2 f! 3.142 s1$ '' s2$ 'wombat' Error in line 9: Invalid character This happens because READ/DATA handles integer and float expressions but has "unusual" handling for string variables, presumably to handle the legacy case of the unquoted string. Suggested remediation: - Either, remove legacy support for unquoted strings; easy for me to say since I don't use it. - Or, if the first character in string data is a double-quote then treat it as a string expression, and accept the limitation that you must always start string data with a literal, even if it is the empty literal "". Best wishes, Tom P.S. If you do "fix" either of these issue I would appreciate you telling me what fix you implement so that MMB4L can be adjusted accordingly. Edited 2022-06-28 19:29 by thwill Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
thwill Guru Joined: 16/09/2019 Location: United KingdomPosts: 4043 |
Hi Peter, I know MMB4W is a bit of a Cinderella at the moment, but here is another strange one for you: > list "odd-bug.bas" Dim test$ = foo$() test$ = foo$() Function foo$() End Function > run "odd-bug.bas" 0 > I can't see any reason for this to output "0", and if you change the variable name from test$ it doesn't happen !!! Best wishes, Tom Game*Mite, CMM2 Welcome Tape, Creaky old text adventures |
||||
Page 15 of 30 |
Print this page |