<><><><>› MODULAR PROGRAMMING IN ATARI BASIC!› › This is Part I. (LOOK FOR PART II in› the next OL' HACKERS newsletter!)›› by Ron Fetzer-memberof OL'HACKERS NY› This article has been submitted› to The ATARI CLASSIC magazine!›› How many times have you said "I› wish I could write a long program› like Print Shop"? Have you ever› wondered how these long professional› programs were written? Is there a way› I could write a program like this?› The answer is yes! There is a method› of programming not widely know among› BASIC programmers called Modular› Programming. If you learned› programming by yourself, like I did,› you know the limitations of Brute› Force programming. I usually hit the› wall around 200 lines before I become› hopelessly lost.› There is an easy and better way› of writing programs. If you can write› 15 lines of code then you can write› modular programs that easily exceed› the memory of your computer. The› central idea of modular programming› is that you break a big task into› small units. Thus you are concerned› with only a small part of the task at› any one time. Programming will again› become fun and very satisfying. The› academic term for this method is› called Structured Programming. It has› been kept a secret from BASIC› programmers for a long time. The› professionals use it all the time.› Atari BASIC is very well suited for› this method of programming because it› has a very compact structure that can› be learned very quickly.› If you use modular programming› you will write short modules and› string them together to create a› whole program. You will have many› benefits. 1. Your program now will be› easy to write the first time.› 2. Your program is easy to read by› anyone.› 3. It can be changed or modified› easily.› 4. Bugs can be found instantly.› 5. The program is self documenting.› 6. Large programs do not present a› problem anymore.› 7. The programs will be elegant.› 8. Programming will become fun again› because there is no more› frustration.›› To start with you write out your› ideas for the program in English. You› make an outline just the way you did› for a composition in High School.› Next you make a block diagram. That› shows you how many modules you need› and how they are connected. Then you› write a skeleton program. This is to› see that the modules execute in the› right order. Finally you flesh out› the skeleton program into a complete› program.›› Writing the code for the program› is the easiest part and should take› the least amount of your time.› Planning the program should take the› most part of your time. This looks› like a lot of work. It is not. It can› be sketched out very quickly. Each› step leads to the next step. You have› now created a blue print to follow› that is guaranteed to work. After you› have tried this method once you will› never go back to Brute Force› programming again.›› In modular programming you start› out with the most general module› first and then each succeeding module› becomes more specific. The first› module is the control module. The› control module is the head or brain› of your program. It controls your› program. The sub modules do not› influence the control module. In› Atari BASIC you use the GOSUB -› RETURN function for all modules.›› My better half the other day› said "Dear can't you write a program› that prints the addresses on the› Christmas Card Envelopes? Sticking on› labels looks so commercial". Thus was› born the idea of the Envelope› program. Why stop with Christmas› Cards? Lets do business envelopes and› large 7 X 9 envelopes also. Below is› the outline in English of the ideas› that I want in my program.›› ENVELOPE PROGRAM›› I MAIN HEADING› A)DIM SECTION› B)SCREEN COLORS› C)RETURN ADDRESS› D)FORWARDING ADDRESS› E)MENU›› II MENU› A)CHRISTMAS CARDS(5 X 7)› B)BUSINESS ENVELOPES(4 X 9.5)› C)LARGE ENVELOPES(7 X 9)› D)END›› III PRINT SECTION› A)PRINT RETURN ADDRESS› B)PRINT FORWARDING ADDRESS›› I want the user to have a choice› of screen colors while the program is› on the screen. The user should type› his return address only once and then› have a choice of envelope sizes. The› menu should also have an END option› so the user can exit.›› Now I have a general idea of› what I want in my program. The next› step is to write a block diagram.› This block diagram will show you how› many modules you need and the range› of line numbers. Each line above will› become a module.›› A block is a section of code› that performs one action. A module› can contain one or more blocks. A› block as well as a module should› follow the rule of straight sequence,› that is the entry point should be at› the top and the exit at the bottom of› the block or module. Do not jump out› of the module or block with a GOTO or› you will have spaghetti code.›› It is important not to skip this› step. Sometimes you will have modules› calling sub modules or sub sub› modules. Each module is in the form› of a GOSUB - RETURN. For each module› I skip by 500 numbers to make it easy› on myself. The block diagram below› follows the outline that I did before› in English.›› ENVELOPE BLOCK DIAGRAM›› 10 - 499 CONTROL BLOCK› 500 - 999 DIM SECTION› 1000 - 1499 SCREEN COLORS› 1500 - 1999 ENTER RETURN ADDRESS› 2000 - 2499 MENU› 2500 - 2999 ENTER FORWARDING ADDRESS› 3000 - 3499 * CHRISTMAS ENVELOPES› 3500 - 3999 * BUSINESS ENVELOPES› 4000 - 4499 * LARGE ENVELOPES› 5000 - 5499 PRINT RETURN ADDRESS› 5500 - 5499 END› * These modules use also the sub› modules of PRINT RETURN ADDRESS and› FORWARDING ADDRESS.›› The control module calls all› other modules. Each module returns› eventually to the control module› where it is directed again to the› menu module. A good program is easy› to read, consistent and self› documenting. You now have a outline› of your program with all its› modules.›› It is now so easy to set up a› skeleton program. The skeleton› program will confirm the correct› execution of your modules. Later on› the skeleton program gets fleshed out› to the full program. Each module in› the skeleton program will have a› PRINT statement in it to show the› function of the module when the› program is run. Later on when you› flesh out the skeleton program you› will take out this print line. Below› is the skeleton program.›› ENVELOPE SKELETON PROGRAM›› 0 GOTO 10› 1 SAVE "D:SKELETON.ENV":CLR› 5 REM SKELETON PROGRAM FOR› "ENVELOPE.ATR" VER 1.0 IN ATARI BASIC› BY RON FETZER 9/92› 10 REM CONTROL› MODULE*******************************› ******› 20 ? CHR$(125):GOSUB 500:REM DIM› SECTION› 30 GOSUB 1000:REM SCREEN COLORS› 40 GOSUB 1500:REM RETURN ADDRESS› 50 GOSUB 2000:REM MENU› 60 GOTO 50› 500 REM DIM› SECTION******************************› *********› 510 ? :? "DIM SECTION":GOSUB 30000› 520 RETURN › 1000 REM SCREEN› COLORS*******************************› *****› 1010 ? :? "SCREEN COLORS":GOSUB› 30000› 1020 RETURN › 1500 REM RETURN› ADDRESS******************************› *****› 1510 ? :? "RETURN ADDRESS":GOSUB› 30000› 1520 RETURN › 2000 REM› MENU*********************************› ************› 2010 ? :? " MENU:":? :? › 2020 ? "1. CHRISTMAS CARDS(5 X7)"› 2030 ? "2. BUSINESS ENVELOPES(4 X› 10)"› 2040 ? "3. LARGE ENVELOPES(7 X 9)"› 2050 ? "4. END"› 2060 ? :? " SELECT A› NUMBER";:INPUT N› 2070 ON N GOSUB 3000,3500,4000,5500› 2080 RETURN › 2500 REM FORWARDING› ADDRESS******************************›› 2510 ? :? "FORWARDING ADDRESS":GOSUB› 30000› 2520 RETURN › 3000 REM CHRISTMAS› CARDS********************************› *› 3010 ? CHR$(125):GOSUB 5000› 3020 GOSUB 2500› 3030 ? :? "CHRISTMAS CARDS(5 X› 7)":GOSUB 30000› 3040 RETURN › 3500 REM BUSINESS› ENVELOPES****************************› ****› 3510 ? CHR$(125):GOSUB 5000› 3520 GOSUB 2500› 3530 ? :? "BUSINESS ENVELOPES (4 X › 9.5)":GOSUB 30000› 3540 RETURN › 4000 REM LARGE› ENVELOPES****************************› ******› 4010 ? CHR$(125):GOSUB 5000› 4020 GOSUB 2500› 4030 ? :? "LARGE ENVELOPES(7 X› 9)":GOSUB 30000› 4040 RETURN › 5000 REM PRINT RETURN› ADDRESS******************************› 5010 ? :? "PRINT RETURN› ADDRESS":GOSUB 30000› 5020 RETURN › 5500 REM› END**********************************› ************› 5510 ? :? "END OF PROGRAM":GOSUB› 30000› 5520 END › 5530 RETURN › 30000 REM TIME DELAY LOOP USED ONLY› IN THE SKELETON PROGRAM› *************************************› ********************› 30010 FOR T=1 TO 180:NEXT T› 30020 RETURN › 30030› REM**********************************› ***********************›› I separate each module with a› REM and the module name. Then I fill› in the rest of the module separator› with asterisks until I have two› screen lines. In this way I can› separate very clearly each module in› the program.›› The time delay loop in lines› 30000 to 30020 is used only in the› skeleton program to slow down the› execution of the program so you can› see if it executes correctly.›› In conclusion in modular› programming the most important part› is the planning. Write out an outline› in English of your ideas for the› program. You must set up a block› diagram to show what modules you› need. The control module should be› the first module. You must write a› skeleton program to see if your› program will execute correctly.›› Each block and module follow the› law of straight sequence. You enter› at the top and exit at the bottom or› the end of the block or module. This› is the natural expectation in reading› a sequence and thus should be› followed without fail. Do not jump› out of a block or a module with a› GOTO.›› Now it will be so easy to finish› your program. You know it will work.› You know that you can complete each› module at your leisure. You know you› can find a bug instantly. You know› you are going to be successful.›› Programming will become fun› again. You now can be proud of your› program, not only does it work but it› is also professionally written. Your› program now will compare with the› best of them.›› In the 2nd part of this series I› will show you how to flesh out and› polish your program and complete it.›› I am a member of the OL' HACKERS› ATARI USERS GROUP in Oceanside N.Y.› If you want more materials on this› subject we have the "PROGRAMMING› KIT". It is a 3 disk double sided› disk set. It discusses this subject› in greater detail and uses TURBO› BASIC. It is available for $7.00 from› us. Write to Alex Pignato, 3376 Ocean› Harbor Dr., Oceanside N.Y. 11572.› Make the check payable to Ron› Fetzer.›› LOOK FOR PART 2› <><>›