IonicWind Software

IWBasic => Console Corner => Topic started by: Techno on October 28, 2008, 02:11:55 AM

Title: Error in the code with gosubs and goto's
Post by: Techno on October 28, 2008, 02:11:55 AM
Dear programmer

I try to compile this program that I have written with goto's en gosub's.
How can I written this program structered without goto's en gosub's
It on the elektor book PC ports onder windows 16



$USE "inpout32.lib"
DECLARE IMPORT, Inp32(PortAddr : WORD), WORD
DECLARE IMPORT, Out32(PortAddr : WORD, PortData : WORD)
DECLARE EXTERN _sscanf(STRING buf, STRING format,...),INT
DECLARE EXTERN sprintf(POINTER p, POINTER p, ...), INT
DECLARE "kernel32", Sleep(time:int)

CONST BA  = 0x2F8

OPENCONSOLE
DEF ByteArray[3] AS INT
ByteArray = 3, 1, 0, 2
DEF Positie AS STRING

DO
INPUT "Positie", Positie
GOSUB Label1
UNTIL Positie <> ""

DEF U AS INT
DEF X AS INT
DEF S AS INT

LABEL Label1

LABEL Uitvoer
IF(U > X) THEN U++
S = (U % 4)
Out32((BA + 0x04), ByteArray[S])
IF(U = X) THEN RETURN
FOR n = 1 TO 100
NEXT n
GOTO Uitvoer
CLOSECONSOLE


Errror Report
========

Compiling...
StepperMotor.eba
File: C:\StepperMotor.eba (17) Warning: undeclared function 'Label1'
File: C:\StepperMotor.eba (30) RETURN outside of subroutine
Error(s) in compiling C:\StepperMotor.eba

Can someone help me written this code without goto's and gosubs only structered?

Title: Re: Error in the code with gosubs and goto's
Post by: Barney on October 28, 2008, 04:56:10 AM
If you bothered to check the help file coming with EBASIC you would have noticed that GOSUB does not work with LABEL. It calls a function with the name you specify after the GOSUB keyword.

This is from the HELP file regarding GOSUB:

Syntax

GOSUB name
GOSUB name(parameters)

Description
Calls a subroutine.  Included for backwards compatibility with other languages.

Parameters
name - Name of subroutine to call
parameters - Comma separated list of parameters

Return value
None

Remarks
It is not necessary to use GOSUB as you can call any subroutine directly by its name.


GOTO on the other hand uses LABEL and can be used as a typical GOTO was used in the older versions of BASIC language.

I suggest you rewrite your program so that it conforms to EBASIC's way of doing things.

Barney
Title: Re: Error in the code with gosubs and goto's
Post by: LarryMc on October 28, 2008, 05:54:54 AM
Techno

Read the Languages/Variables/Arrays section of the help file to get your "ByteArray" defined and initialized properly.

Read the Language/Subroutine section of the help file to resolve your "GOSUB Label1" issue.

You never initialized X or U to any start value so your "gosub routine" can never work.

You don't have an end statement so your program would probably crash if it did compile the way you have it right now.
In the General Programming/Text only programs section of the help file there are examples of how to structure a consolewindow program.

You really need to spend some time reading the help file.

Larry