QBasic syntax error?

Why does QBasic give me a syntax error with this code?

----------------------------------------------------------------------------------------

DATA 0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,2 '11100001011100

CLS

WHILE TI < 2 AND INKEY$ = ""

READ TI

IF TI = 0 THEN

IF I = 0 AND P = 1 THEN PRINT "1"; IF I = 1 AND P = 1 THEN PRINT "0"; P = P + 1 IF P = 2 THEN P = 0

END IF

IF TI = 1 THEN

I = I + 1 IF I = 2 THEN I = 0 IF I = 0 THEN PRINT "0"; IF I = 1 THEN PRINT "1";

END IF

WEND

IF P = 0 THEN END IF I = 1 THEN PRINT "0" ELSE PRINT "1"

END

Reply to
Bill Bowden
Loading thread data ...

Comments aren't permitted on DATA statements, memory serving. When I get a moment, I'll double check that detail, though.

Jon

Reply to
Jon Kirwan

----------------------------------------------------------------------------------------

acause you're using BASIC. Do the job in C and you'll get more syntax errors at first, but once you have them straightened out your program will run faster (and be much more cool).

--
My liberal friends think I'm a conservative kook. 
My conservative friends think I'm a liberal kook. 
Why am I not happy that they have found common ground? 

Tim Wescott, Communications, Control, Circuits & Software 
http://www.wescottdesign.com
Reply to
Tim Wescott

Yeah, then you can chase a latent bug a week and be just like Microsoft.

Reply to
krw

Bingo! Kill the comment.

George H.

Reply to
George Herold

----------------------------------------------------------------------------------------

Also it won't be shouting blather at the top of its little lungs. When I read this sort of code, I always think of Robbie the Robot.

10 WHILE 1 20 PRINT "DANGER WILL ROBINSON!!!!!" 30 WEND

;)

Cheers

Phil Hobbs

--
Dr Philip C D Hobbs 
Principal Consultant 
ElectroOptical Innovations LLC 
Optics, Electro-optics, Photonics, Analog Electronics 

160 North State Road #203 
Briarcliff Manor NY 10510 

hobbs at electrooptical dot net 
http://electrooptical.net
Reply to
Phil Hobbs

----------------------------------------------------------------------------------------

Hmm... C tends to be more dangerous when used by the ignorant.

petrus bitbyter

Reply to
petrus bitbyter

----­-------------

x

t -

Now, now... for 'we bears of very little brain'* basic is a fine language. I've got several little programs that help me on my way.

GOSUB nitpick

All in good fun :^) Hey there's this white fluffy stuff falling outside my window. What's that? And here's wishing all the SEBers a wonderful Holiday season! I'm cutting out early to go decorate Xmas cookies at granma's with the kids.

George H.

SUB nitpick basic doesn't need line numbers anymore the commands are still in caps, but I use lower case for variables which makes it easier to read. Robbie the Robot (a nice Asimov story.) was not on the screen with Will Robinson. (Undoubtedly the worst Sci-fi series ever!) RETURN

*no insult intended for other basic users.
Reply to
George Herold

Yeah, I went off and installed XP mode and then dragged my entire Microsoft development environment (VBDOS, QB45, QBASIC, QC2, ML/MASM, and a bunch of other "old tools") over from an old machine and set up something I could test with. Needed to do that, anyway. And yes, I did a quick test with and without the comments and it worked without and didn't work with.

This goes back to the 1970's, by the way. I used the original Microsoft papertape BASIC (which I may still have in papertape form if you can believe it) and had been "shocked" that comments on DATA statements caused it to have parsing problems. I was used to (1) languages that didn't support comments, such as HP 2000F BASIC, and (2) languages which had no problem with dealing with comments on DATA statements -- I believe it was on a PDP-10, but memory is vague now. But I'd never experienced one that couldn't handle something it permitted.

I just figured that Microsoft's BASIC treated a DATA statement almost like a REM statement -- it didn't parse it or anything. It just accepted ANYTHING you typed there. It was "your problem" and not theirs, what you did. Only at run-time did it check and parse things. And since it was nothing more than a keyword followed by unchecked text, they took the easy way out and didn't bother supporting comment recognition.

Still holds with their later tools, I see.

Jon

Reply to
Jon Kirwan

---------------------------------------------------------------------------­-------------

It's cold here in Arizona, too... 68°F >:-}

Damned AGW... I had to turn on the heat two days ago... got down to

65°F in the house.

Managed to go 2-1/2 months with neither A/C or heat! ...Jim Thompson

--
| James E.Thompson, CTO                            |    mens     | 
| Analog Innovations, Inc.                         |     et      | 
| Analog/Mixed-Signal ASIC's and Discrete Systems  |    manus    | 
| Phoenix, Arizona  85048    Skype: Contacts Only  |             | 
| Voice:(480)460-2350  Fax: Available upon request |  Brass Rat  | 
| E-mail Icon at http://www.analog-innovations.com |    1962     | 
              
I love to cook with wine.     Sometimes I even put it in the food.
Reply to
Jim Thompson

---------------------------------------------------------------------------­-------------

--- Power BASIC's Console Compiler commands are all lower case and the source code is gorgeous.

Here's an example, the application being a 2 resistor voltage divider solver, with the executable at abse:

function pbmain() as long

color 0,15 cursor on,10

e1sw: gosub loopa print "Solve for E1? " locate 13,20

e1yorn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then goto e1out if i$ = "n" or i$ = "N" then goto r1sw goto e1yorn

r1sw: print"" print "Solve for R1? " locate 14,20

r1yorn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then goto r1out if i$ = "n" or i$ = "N" then goto e2sw goto r1yorn

e2sw: print"" print "Solve for E2? " locate 15,20

e2yorn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then goto e2out if i$ = "n" or i$ = "N" then goto r2sw goto e2yorn

r2sw: print"" print "Solve for R2? " locate 16,20

r2yorn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then goto r2out if i$ = "n" or i$ = "N" then goto endsw goto r2yorn

endsw: print "" print "End? " locate 17,11

endyorn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then end if i$ = "n" or i$ = "N" then goto more goto endyorn

more: print"" print "Another try? " locate 18,19

moreyn: i$ = waitkey$ if i$ = "y" or i$ = "Y" or i$ = chr$(13) then goto e1sw if i$ = "n" or t$ = "N" then end goto moreyn

e1out: print"" input "Enter resistance of R1 in ohms: " ,r1! input "Enter voltage of E2 in volts " ,e2! input "Enter resistance of R2 in ohms: " ,r2!

e1!=(e2!)*(r1!+r2!)/r2!

print"" print "E1 = "e1!" volts."

print "another run? " i$ = waitkey$ if i$ = "y" then gosub loopa else end goto e1out

r1out: print"" input "Enter voltage of E1 in volts: " ,e1! input "Enter voltage of E2 in volts " ,e2! input "Enter resistance of R2 in ohms: " ,r2!

r1!=(r2!)*(e1!-e2!)/e2!

print"" print "R1 = "r1!" ohms."

print "another run? " i$ = waitkey$ if i$ = "y" then gosub loopa else end goto r1out

e2out: print"" input "Enter voltage of E1 in volts: " ,e1! input "Enter resistance of R1 in ohms: " ,r1! input "Enter resistance of R2 in ohms: " ,r2!

e2!=(e1!*r2!)/(r1!+r2!)

print"" print "E2 = "e2!" volts."

print "another run? " i$ = waitkey$ if i$ = "y" then gosub loopa else end goto e2out

r2out: print"" input "Enter voltage of E1 in volts: " ,e1! input "Enter resistance of R1 in ohms: " ,r1! input "Enter voltage of E2 in volts " ,e2!

r2!=(e2!*r1!)/(e1!-e2!)

print"" print "R2 = "r2!" ohms."

print"" print "another run? " i$ = waitkey$ if i$ = "y" then gosub loopa else end goto r2out

loopa: cls print"" print " E1" print " |" print " [R1]" print " |" print " +---E2" print " |" print " [R2]" print " |" print " GND print"" print""

return

end function

-- JF

Reply to
John Fields

I forget to mention the code works ok with Borland Turbo Basic. I did find that adding an extra '2' to the data list fixes the problem so it runs right in QBasic. I'm just wondering why I need an extra data character in one case and not the other?

-Bill

Reply to
Bill Bowden

It's supposed to hit 28°F here in Central Florida in a couple hours.

Reply to
Michael A. Terrell

I've got QB45 installed. I run half a dozen programs. It runs in this little minimalist screen resolution, which is kinda quaint, reminds me of grad school.

George H.

Reply to
George Herold

-------­­-------------

ntax

m

hen

ext -

es

th

    ...Jim Thompson
   |    mens     |
  |     et      |
 |
      |

ide quoted text -

There's talk of a foot or more of snow. But I'll believe it when I see it. (I like the snow.)

George H.

Reply to
George Herold

-------­­-------------

ntax

m

hen

ext -

es

th

oto e1out

oto r1out

oto e2out

oto r2out

nd

oto e1sw

I ordered a copy of power basic for $50, on someone's recommendation (James A.?) I haven't written anything in it yet though.

George H.

Reply to
George Herold

QB45 will run with 50 lines, if you want. If you set the DOS box properties so that it starts with 50 lines, then QB will use it. If not, QB45 will still be able to use 50 lines, but you have to write a few lines of code then to force the line change.

Jon

Reply to
Jon Kirwan

Because QBASIC doesn't accept comments. Borland most certainly does, by comparison.

Jon

Reply to
Jon Kirwan

I don't think the comments are the problem. In one case with Turbo Basic the line reads "DATA

0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,2 '11100001011100"

In the second case with QBasic, the line reads "DATA

0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,2,2 '11100001011100 "

All I did was add an extra 2 which fixed the problem. But looking at the code, the extra 2 at the end is not needed, but QBasic says it is.

-Bill

Reply to
Bill Bowden

qbasic is reading "2 'comment" as the last data value and can't interperet that as a number.

Adding an extra datum stops it from looking at the last data value.

--
?? 100% natural
Reply to
Jasen Betts

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.