Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
A big D on my hat
#11
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.
Reply


Messages In This Thread

Forum Jump:


Users browsing this thread: 2 Guest(s)