Re: Structured Programming: QB IS STRUCTURED!!!
- Posted by Chris Burch <chriscrylex at aol.com> Jan 17, 2006
- 622 views
Lynn Kilroy wrote: > > >Hi > > > >Ah ha - the goto / gosub/return argument again. > > > >Short answer no - look through the mailing list archives for all the pro > >and con arguments. Assume there are no subroutines - in the qbasic sense. > >When you get used to euphoria, its far prettier and easier to read. > > > >As with most things euphoria, there are work arounds > > > >functions - return a value > >procedures - do not return a value > > > >both need to to be found in your program (in the way the program is read), > >before you actually call them (can use routine_ids, but keep it simple for > >now) > > > >The 'preferred' method is to only use local variables to your > >functions/procedured, as this leads to prettier, more re usable code, eg > > > >}}} <eucode> > >function foo(integer x) > >integer y > >y = x * 2 > >return y > >end function > > > >integer z > >z = foo(2) > ></eucode> {{{ > > > >now if you used untidy global variables (bad programming practice (hands up > >those who NEVER do it)) > > > >}}} <eucode> > >integer y, z > > > >procedure foo(integer x) > >y = x * 2 > >end procedure > > > >foo(4) > >z = y > ></eucode> {{{ > > > >yeuch, horrible. > > > >Is this what you meant. > > > >Also say goodbye to on x gosub/goto, and switch/case statements (are these > >in qbasic?) > > > >Chris > > > Tried it. Didn't work. Now, since you're so smart, mebbe you can tell me > if you can find a single goto / gosub / return in this program which is just Whoa - this is setting the tone. > > full of subroutines. And by the way, I insist you read through the whole > thing. I have the buggery that prompted this whole mess in the first place > > copied neatly in the code. Before you ask, yes, it is in the graphics.e > file. I looked. Yes, the include statement is in the beginning of the > file, before the call to the included file's subroutine. But I get this > error. Mebbe you, who knoweth I do not understandith structured > programming, could explain to me what the proper structureth be-ith so I can > > codeth in the correcteth structureth? > > Your ignorance of the structured nature of QB astounds me. Why? I haven't used QBASIC for 20 years. So much for trying to help poeple. Why bother. The only thing > that could possibly astound me more is the fact that QB - written probably > close to twenty years ago - parses all the subroutines in to their own > little windows, so you can edit them individually without having to search > through the code to find them, and Ed does not. So much for readability. > > Love & Friendship & Blessed Be! Thats an oxymoron isn't it. > Lynn Erika Kilroy > > <!-------------------BEGIN QBASIC SOURCE-------------------> > DECLARE SUB ColorLocateInputJustAboutAnything (FGC AS INTEGER, BGC AS > INTEGER, CTFGC AS INTEGER, CTBGC AS INTEGER, Row AS INTEGER, Col AS INTEGER, > > Text AS STRING, VWidth AS INTEGER) > DECLARE SUB ColorLocatePrint (FGC AS INTEGER, BGC AS INTEGER, Row AS > INTEGER, Col AS INTEGER, Text AS STRING) > DECLARE SUB EndProgram () > DECLARE SUB Initialize () > DECLARE SUB Inkey (a AS STRING) > DECLARE SUB MasterControlProgram () > DECLARE SUB Prekey (a AS STRING) > DECLARE SUB WaitKey (a AS STRING) > > DIM SHARED LastRow AS INTEGER > > Initialize > MasterControlProgram > EndProgram > > SUB ColorLocateInputJustAboutAnything (FGC AS INTEGER, BGC AS INTEGER, CTFGC > > AS INTEGER, CTBGC AS INTEGER, Row AS INTEGER, Col AS INTEGER, Text AS > STRING, VWidth AS INTEGER) > > : REM FGC = ForeGroundColor > : REM BGC = BackGroundColor > : > : REM CTFGC = CursorTextForeGroundColor > : REM CTFGC = CursorTextBackGroundColor > : > : REM Row = The Row we Print it on > : REM Col = The Column we Print It on > : > : REM Text = The Text We're Editing. Yes. Editing. What'd you think? > This > : REM was going to be like INPUT? > : > : REM VWidgth = ViewWidth, in Characters. > : > DIM CursorPosition AS INTEGER > : > DIM VTextStart AS INTEGER > : > DIM InputMode AS STRING > : > DIM a AS STRING > > CursorPosition = LEN(a) + 1 > VTextStart = CursorPosition - VWidth > > InputMode = "OverWrite" > > WHILE a <> CHR$(13) > > IF CursorPosition < VTextStart THEN > VTextStart = CursorPosition > ELSEIF CursorPosition - VWidth > VTextStart THEN > VTextStart = CursorPosition - VWidth > END IF > > IF VTextStart < 1 THEN > VTextStart = 1 > END IF > > ColorLocatePrint FGC, BGC, Row, Col, SPACE$(VWidth) > ColorLocatePrint CTFGC, CTBGC, Row, Col + VWidth, MID$(InputMode, 1, 1) > : > IF LEN(Text) > VWidth THEN > ColorLocatePrint FGC, BGC, Row, Col, MID$(Text, VTextStart, VWidth) > ELSE > ColorLocatePrint FGC, BGC, Row, Col, Text > END IF > : > ColorLocatePrint CTFGC, CTBGC, Row, Col + CursorPosition - VTextStart, > MID$(Text + CHR$(176), CursorPosition, 1) > > WaitKey a > > IF LEN(a) = 1 THEN > : > IF a = CHR$(8) THEN > : > IF CursorPosition > LEN(Text) THEN > Text = MID$(Text, 1, CursorPosition - 2) > ELSE > Text = MID$(Text, 1, CursorPosition - 2) + MID$(Text, CursorPosition, > > LEN(Text) - CursorPostion) > END IF > : > CursorPosition = CursorPosition - 1 > : > ELSEIF a = CHR$(27) THEN > : > Text = "" > CursorPosition = 1 > : > ELSEIF a > CHR$(31) THEN > : > IF CursorPosition > LEN(Text) THEN > Text = Text + a > ELSE > IF InputMode = "OverWrite" THEN > MID$(Text, CursorPosition, 1) = a > ELSEIF InputMode = "Insert" THEN > Text = MID$(Text, 1, CursorPosition - 1) + a + MID$(Text, > CursorPosition, LEN(Text) - CursorPosition) > END IF > END IF > : > CursorPosition = CursorPosition + 1 > : > ELSEIF a <> CHR$(13) THEN > : > BEEP > : > END IF <snip> http://members.aol.com/chriscrylex/euphoria.htm http://uboard.proboards32.com/ http://members.aol.com/chriscrylex/EUSQLite/eusql.html