Boriel Basic Forum
A big D on my hat - Printable Version

+- Boriel Basic Forum (https://forum.boriel.com)
+-- Forum: Compilers and Computer Languages (https://forum.boriel.com/forumdisplay.php?fid=12)
+--- Forum: ZX Basic Compiler (https://forum.boriel.com/forumdisplay.php?fid=11)
+---- Forum: Help & Support (https://forum.boriel.com/forumdisplay.php?fid=16)
+---- Thread: A big D on my hat (/showthread.php?tid=583)



A big D on my hat - ardentcrest - 2014-02-18

How do I do,

Code:
dim a$(3) for f=1to 3 read a$(f) data "text1","text2","text3"



Re: A big D on my hat - boriel - 2014-02-18

ardentcrest Wrote:How do I do,

Code:
dim a$(3) for f=1to 3 read a$(f) data "text1","text2","text3"
At the moment, ZX BASIC does not support read, data.
You have to do:
Code:
a$(1) = "text1" a$(2) = "text2" ...
If you need to reset a$ from time to time, put it in a subroutine.
Note: Support for READ, DATA and RESTORE is planned (for backward compatibility).


Re: A big D on my hat - ardentcrest - 2014-02-18

Thanks


Re: A big D on my hat - ardentcrest - 2014-02-18

Quote:temp.bor:16: identifier 'v$' is a var, not an array

Code:
dim v$(10) v$(1)="n" v$(2)="s" v$(3)="e" v$(4)="w"

:|


Re: A big D on my hat - boriel - 2014-02-18

ardentcrest Wrote:
Quote:temp.bor:16: identifier 'v$' is a var, not an array

Code:
dim v$(10) v$(1)="n" v$(2)="s" v$(3)="e" v$(4)="w"

:|
This seems a bug I've recently fixed. Can you check you have the latest version? (1.4.0s1860)


Re: A big D on my hat - ardentcrest - 2014-02-18

mine 1.4.0-s1860

remember I'm using borIDE


Re: A big D on my hat - boriel - 2014-02-18

Damn it!
I forgot to upload the fix! Confusedhock: And the packing script is in a machine 2500km away from me :oops: :lol:
Will try to upload the new version tonight.


Re: A big D on my hat - ardentcrest - 2014-02-18

:evil: :evil: :evil: :evil: Arrow :roll:


Re: A big D on my hat - ardentcrest - 2014-02-19

Code:
for i=1 to len(q$)-1 if q$(1 to i)=" " and x$="" then let x$=q$( 1 to i-1) next i

input.bas:38: warning: Empty loop

works if I remove the if line but still give empty loop warning


OK need to add end if but nothing appears in the x$


Re: A big D on my hat - ardentcrest - 2014-02-19

got it Smile

I have to learn basic all over again, not just for the spectrum but for the compiler :evil:


Re: A big D on my hat - dbolli - 2015-02-10

Try this for an interim solution

Code:
#include "read-data-restore.bas" SETDATAVALUES( @TESTDATA1 ) WHILE ( NOT DataValuesEndFlag ) PRINT READDATA() ': PRINT END WHILE PAUSE 0 SETDATAVALUES( @TESTDATA2 ) DIM Duration as Float DIM Pitch as Byte WHILE ( NOT DataValuesEndFlag ) Duration = VAL( READDATA() ) Pitch = VAL( READDATA() ) BEEP Duration, Pitch END WHILE STOP TESTDATA1: ASM DEFM "String1," DEFM "string2," DEFM "string3," DEFM "string4,string5,string6,string7,string8,string9" DEFB $00 ; Terminating byte END ASM TESTDATA2: ASM ; Frere Gustav DEFM "1,0,1,2,.5,3,.5,2,1,0," DEFM "1,0,1,2,.5,3,.5,2,1,0," DEFM "1,3,1,5,2,7," DEFM "1,3,1,5,2,7," DEFM ".75,7,.25,8,.5,7,.5,5,.5,3,.5,2,1,0," DEFM ".75,7,.25,8,.5,7,.5,5,.5,3,.5,2,1,0," DEFM "1,0,1,-5,2,0," DEFM "1,0,1,-5,2,0" DEFB $00 END ASM --- read-data-restore.bas ' Basic implementation of DATA, READ and RESTORE functionailty ' :dbolli:20150209 19:48:23 DIM DataValuesPointer AS UInteger = 0 DIM CurrentDataValuesPointer AS UInteger = 0 DIM DataValuesEndFlag AS Byte = 0 DIM DataSeperator AS UByte = CODE( "," ) SUB SETDATAVALUES ( DataStringPointer AS UInteger ) LET DataValuesPointer = DataStringPointer LET CurrentDataValuesPointer = DataStringPointer LET DataValuesEndFlag = 0 END SUB FUNCTION READDATA AS String IF ( ( CurrentDataValuesPointer <> DataValuesPointer ) AND ( PEEK( UByte, CurrentDataValuesPointer - 1 ) = $00 ) ) THEN ASM RST $08 DEFB $0D ; Report E - Out of DATA error message END ASM ELSE DIM DataReturnString AS String DIM DataByte AS UByte LET DataReturnString = "" WHILE ( 1 ) DataByte = PEEK( UByte, CurrentDataValuesPointer ) LET CurrentDataValuesPointer = CurrentDataValuesPointer + 1 IF ( ( DataByte = DataSeperator ) OR ( DataByte = $00 ) ) THEN EXIT WHILE ELSE LET DataReturnString = DataReturnString + CHR( DataByte ) END IF END WHILE LET DataValuesEndFlag = ( DataByte = $00 ) RETURN DataReturnString END IF END FUNCTION SUB RESTOREDATAVALUES LET CurrentDataValuesPointer = DataValuesPointer LET DataValuesEndFlag = 0 END SUB

Regards,
Derek.