QuickBasic Jason Mallory CSC 415: Programming Languages Dr. Lyle November 16, 2011 Development QuickBasic was the precursor to Visual Basic and its development was based on GW-Basic ("QuickBasic." ). First released in 1985, it was sold only on 5.25” floppy disk, despite 3.5” drives replacing the older hardware. Version 2, released in ’86, introduced the IDE that would persist until the final release, QuickBasic 4.5, that hit the market in 1988 (Perry, Z). QBasic, a subset of QuickBasic, was distributed with versions of DOS 5.0 and later, which replaced GW-Basic that had been shipped previously. QuickBasic expanded upon GW-Basic by adding newer features like user defined data types, control structures, better graphics support and an integrated compiler. ("QuickBasic.") QuickBasic, despite being nearly 3 decades old and that it has not been supported for almost as long, still sees use today. Within the hobbyist programming communities, it is still being used to create simple games, software for small personal businesses and as of late, it has been used to allow machines as old as the 8088 to be networked ("QuickBasic."). Data Types QuickBasic data types included strings, integers, long integers, single precision, double precision, and user defined data types. Variables could be declared in one of two ways. You could use either DIM name AS type or you could append the variable name with a symbol to declare its type when it was initialized. The symbols used were $ for strings, % for integers, & for long integers, ! for single precision, and # for double precision. Given that QuickBasic did not have a character data type, strings were a data type of its own rather than being an array of characters like many other languages. Arrays have to be declared using the dim method and appending the variable name with the dimensions of the array like DIM name(x, y, z, etc.) AS type. From what can be inferred from the application help file, it would appear that numeric variables were always signed 32 bit values. Reserved words could not be used for variable names and QuickBasic was not case sensitive. Variables in QuickBasic were locally scoped whereas some other BASIC languages used only global scoping. One bonus to the methods used to declare variables was when it came to procedures. While the appended symbol method was convenient for easily seeing the variables type, the DIM name AS type method allowed you to change the type by simply changing the type keyword. Through the SHARED keyword, variables could be used out of scope, increasing the ease of code reusability (Noggle, 80). Arithmetic, Relational, and Logical Operators QuickBasic possessed the standard stable of arithmetic operators such as exponentiation (^), negation (-), multiplication and division (*, /), integer division (\), modulo arithmetic (MOD), and addition and subtraction (+, -), with an operator precedence of the order given. Relation operators included equal to (=), greater then (>), less than (<), not equal to (<>), less than or equal to (<=), and greater than or equal to (>=). In regards to logical operators, QuickBasic supported operators for not (NOT), and (AND), or (OR), exclusive or (XOR), equivalent or if and only if (EQV), material implication or X implies Y (IMP). Program Structure Microsoft made the move to a more structured format from the start with QuickBasic and with newer versions, continued to improve upon this. QuickBasic still supported line numbers and program jumps, although these led to spaghetti code that was difficult to follow and maintain. (QuickBasic) Control structures like IF…THEN…ELSE, SELECT CASE…CASE1…CASE2…CASE ELSE…END SELECT, DO WHILE…LOOP, DO UNTIL…LOOP, and for loops in the form of FOR…NEXT were supported in QuickBasic. These included both block and single line verses. The inclusion of these, as well as functions and procedures, allowed for the creation of more professional code. Subprograms QuickBasic supported procedures, but they were stored and written separately from the main program file. Through the use of the SUB keyword, the editor would take you to a new window as soon as the procedure was declared ("QBASIC Programming for Kids."). The syntax for declaring a procedure was as follows: SUB name [ parameterList] [statements] [EXIT SUB] [statements] EXIT SUB Through the use of subprograms and user defined data types, something that resembled object oriented programming could be accomplished. Exception/Error Handling QuickBasic supported error handling through the ON ERROR GOTO label statement. This statement tells the program what label to go to in the event of an error. ERR, a variable that holds a code related to the error, is then used in a SELECT CASE statement to designate how each error is handled. RESUME NEXT is used after the select case to allow the program to continue. Readability, Writability, and Reliability QuickBasic, being part of the BASIC family, was meant to be a user friendly language. It was marketed by Microsoft as “the introductory level for their BASIC Professional Development System.” ("QuickBasic.") QuickBasic code is fairly easy to follow and read when compared to other languages. Other languages use many abbreviations, but QuickBasic’s code looked almost like a set of instructions given in English. For an example of a complete QuickBasic program, see the appendix: A QuickBasic Example Program. The English like syntax, while making it more readable, has an impact on its writability via the sheer number of keystrokes needed to complete a task. This is balanced by the fact that writing QuickBasic code feels like naturally explaining a task. Regarding reliability, QuickBasic had some differences between the interpreter and the compiler. This meant that code that execute is the interpreter may not compile. ("QuickBASIC." ) Newer versions of QuickBasic were backwards compatible with previous versions. Overview Overall QuickBasic was a language that performed it task. It was a language that was easy to learn. It provided the means to create professional code. During it’s lifetime it was a language that supported the features of it’s day. QuickBasic was a solid language that is used to solve problem, even to this day. Appendix: A QuickBasic Example Program. The following is an example program from the 99 Bottles of Beer website. This site is a collection of source code in many different languages that will generate the lyrics to the song “99 Bottles of Beer.” This specific version can be found at: http://www.99-bottles-ofbeer.net/language-quickbasic-1673.html Language QuickBASIC (boolean algebra, "four phrase" logic) Date: 01/19/08 Author: Al Boulley URL: n/a Comments: 1 Info: n/a Score: (3.12 in 24 votes) 'set fridge capacity, beverage type, and container type X = 99 B$ = "beer" C$ = "bottle" 'build number strings so "0" can be sung correctly in second to last verse DIM N$(X) FOR L = 1 TO X N$(L) = LTRIM$(STR$(L)) NEXT N$(0) = "no more" 'fully stock the fridge, and then start singing! F=X DO 'each verse has four "phrases" FOR P = 1 TO 4 SELECT CASE P: 'three phrases are very similar - first, second, and fourth CASE 1, 2, 4: 'use some boolean algebra to handle the "what-ifs": PRINT N$(F); " "; C$; LEFT$("s", -(F <> 1)); " of "; B$; '-(F=1) evaluates to 1 when F=1.... [-(-1)] ' 0 when F<>1... [-(0) ] '(don't want to pluralize a lone container) PRINT LEFT$(" on the wall", -12 * (P <> 2)); '-12*(P<>2) evaluates to 0 when P=2.... [-12*(0) ] ' 12 when P<>2... [-12*(-1)] '(don't want to sing those words in the second phrase) PRINT MID$(", ." + CHR$(13), 3 + 2 * (P = 1), 2); '3+2*(P=1) evaluates to 1 when P=1.... [3+2*(-1)] ' 3 when P<>1... [3+2*(0) ] '(brief pause after first phrase, long pause after other two) '[using length of zero with Left$ results in empty string] 'third phrase of the song never changes CASE 3: PRINT "Take one down and pass it around, "; F=F-1 END SELECT NEXT 'take an extra breath between verses PRINT 'F evaluates to FALSE when F=0 [exactly zero is always FALSE] ' TRUE when F<>0 [every nonzero is always TRUE] '(continue singing verses until fridge is empty) LOOP WHILE F 'sing final verse the easy way PRINT "No more "; C$; "s of "; B$; " on the wall, no more "; C$; " of "; B$; "." PRINT "Go to the store and buy some more, "; N$(X); " "; C$; "s of "; B$; " on the wall." 'boolean algebra is your friend :) Bibliography Joseph, Noggle H. QuickBasic Programming for Scientists and Engineers. CRC, 1992. Web. Perry, Z. "Programming: QBASIC History Timeline." Associated Content from Yahoo! Associatedcontent.com. Web. 22 Nov. 2011. <http://www.associatedcontent.com/article/423353/programming_qbasic_history_timelin e.html?cat=15>. "QBASIC Programming for Kids." Ted Felix's Home Page. Web. 22 Nov. 2011. <http://tedfelix.com/qbasic/>. "QuickBASIC." Wikipedia, the Free Encyclopedia. Web. 22 Nov. 2011. <http://en.wikipedia.org/wiki/QuickBASIC>.