* * * *¢ Modular Programming in Atari Basic.¢ Part II---- by Ron Fetzer¢¢ Have you ever envied the people¢ who can write long programs. Do you¢ say to yourself, programming is too¢ hard. I do not have any talent for¢ programming. If you say these things¢ then you are missing 90% of the fun¢ of computing. Now there is an easy¢ way of programming. You do not need¢ any special talents. No one ever¢ showed you the easy and fun way of¢ programming. It has been kept a¢ secret from BASIC programmers.¢ Everyone can write great programs!¢ The answer to writing programs is¢ modular programming. Once you try it¢ you will love it.¢¢ Be sure to have the listing of¢ ENVELOPE.ATR (which will be found on¢ the MAY/JUNE OL' HACKER NEWSLETTER,¢ and in the ATARI CLASSIC disk) handy¢ so you can follow the discussion in¢ this 2nd part of the series on¢ programming. Also see "SKELETON.ENV"¢ on side 2 as part of this tutorial.¢¢ In the first part of this series¢ I showed you how to write out your¢ ideas for a program in English. How¢ to construct a block diagram and how¢ to create a skeleton program. You¢ created a blue print for your final¢ program. In this section I will show¢ you how to flesh out the skeleton¢ program and how to polish it up.¢¢ To begin with every program¢ should have a line 0,1 and 5. On line¢ 0 it should say '0 GOTO 10'. Thus¢ when you write RUN the program will¢ go to line 10 and execute. Line one¢ should say '1 SAVE¢ "D:FILENAME.EXT":CLR' in my program¢ it is '1 SAVE "D:ENVELOPE.ATR":CLR'.¢ This is a very useful line when you¢ are developing a program. Every time¢ you want to save part or the whole¢ program you type 'GOTO 1'. The¢ program will now be saved with the¢ same filename all the time. You will¢ not have multiple versions of the¢ program but just one version all the¢ time. The CLR just removes any¢ previous DIM so that the program will¢ run without any trouble.¢¢ Line 5 is the title line of the¢ program. It should have the following¢ information. 1. The author of the¢ program. 2. The name of the program.¢ 3. The version number of the program.¢ 4. What language the program¢ requires. 5. The date it was written.¢ For an example see line 5 of the¢ listing. You can also include your¢ address if you want to so a user can¢ contact you.¢¢ We will now flesh out the¢ skeleton program. The skeleton¢ program is also part of this series.¢ Start each module with a REM and the¢ module name plus asterisks to fill a¢ total of two screen lines. This makes¢ a very visible divider.¢¢ The first module that we have is¢ the CONTROL MODULE. When I clear the¢ screen I always use ? CHR$(125)¢ because every printer can list it.¢ Special characters cannot always be¢ listed. The CONTROL MODULE is already¢ finished as it appeared in the¢ skeleton program¢¢ 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¢¢ I go to the DIM Section, then¢ the SCREEN COLOR MODULE then the¢ RETURN ADDRESS MODULE and then the¢ MENU MODULE. Notice line 60. After¢ each menu selection is completed the¢ program returns to line 60. Line 60¢ directs it again to line 50. Thus you¢ always return to the menu. This kind¢ of program is called a Case¢ Structured type of program. It is the¢ most common type of programming¢ structure used.¢¢ As you can see fleshing out the¢ skeleton program is very easy to do.¢ Our next module is the DIM SECTION.¢ The first thing you do is to remove¢ the PRINT statement from the skeleton¢ program. It is not needed anymore.¢ There is nothing strange in this¢ module. Just put in the DIM variables¢ the way they are needed. If a DIM¢ variable here appears in the front¢ then you know it is in the beginning¢ of the program etc. Do not forget¢ that the RETURN statement now has a¢ new line number.¢¢ In each module the 1st line¢ after the REM line is the¢ housekeeping line for the module.¢ Such things as initializing¢ variables, PEEKS, POKES, string¢ lengths, special codes etc will be¢ put in this line. I do this the same¢ way for every module. Consistency is¢ the hallmark of a good program.¢ Notice line 1010 R$ is set to equal¢ 13 empty spaces. Rather than using¢ the POSITION command for my menu¢ selection I put R$ in front of the¢ options. If I want to center the¢ options I just have to change the¢ length of R$. I want the user to have¢ a choice of the 4 popular screen¢ colors while he is using the program.¢ Error trapping should be extensive¢ and it should always be done the same¢ way in every module. When a choice of¢ color has been implemented then the¢ program exits to the end of the¢ module. This module and all the¢ modules follow the law of straight¢ sequence. You enter at the top of the¢ module and you exit at the bottom of¢ the module. It makes it easy to read¢ and understand your program. All¢ modules must follow this rule.¢¢ The next is the RETURN ADDRESS¢ MODULE. Remove the PRINT statement¢ from the skeleton program. The first¢ line after the REM is the¢ housekeeping line. I only need a ?¢ CHR$(125) in this module. Then I ask¢ for INPUTS for name, street, town,¢ state, Zip Code and¢ country(optional). I write many¢ letters overseas so the country is¢ important to me. This is straight¢ forward programming. The module ends¢ with a RETURN in line 1590.¢¢ The next module is the MENU¢ MODULE. In the housekeeping¢ line(2010) I have an 'LPRINT¢ CHR$(27);"8"'. This is the control¢ code to TURN OFF PAPER SENSOR for an¢ Epson printer. I want this sensor off¢ because I will constantly be feeding¢ envelopes into my printer. If you do¢ not know the code for your printer¢ this is what you can do. Remove the¢ paper from the printer. The sensor¢ will now sound. Take a strip of paper¢ and slip it in to the paper feed¢ until the sensor goes off. Then¢ temporarily scotch tape it to the top¢ of your case so it will not be fed¢ through the rollers. Now you can feed¢ envelopes without any trouble and¢ without the noise. Be sure to have¢ and END option in the menu selection¢ so the user can exit. Error trapping¢ again is the same as in the other¢ modules. The module exits with a¢ RETURN in line 2100.¢¢ In the module on FORWARDING¢ ADDRESS I initialize all variables to¢ an empty string in the housekeeping¢ line in 2510. This module will be¢ accessed repeatedly. I want to make¢ sure that the strings are empty. In¢ all other respects it is the same as¢ the RETURN ADDRESS MODULE.¢¢ The CHRISTMAS CARD MODULE, the¢ BUSINESS ENVELOPE MODULE and the¢ LARGE ENVELOPE MODULE are very¢ similar. In the housekeeping line I¢ initialize the variables and set B$¢ equal to the required spaces. I call¢ for sub module FORWARDING ADDRESS¢ (GOSUB 2500) and sub module PRINT¢ RETURN ADDRESS (GOSUB 5000). Then I¢ print then name, street, town, state,¢ Zip Code and country on the envelope.¢ I exit with a RETURN that goes to¢ line 2100 and then to the control¢ module line 60, which in turn puts¢ you back into the menu module.¢¢ The last module is the END¢ MODULE. On the housekeeping line I¢ use POKE 752,1 to turn off the¢ cursor. Then I print "END OF PROGRAM"¢ in the middle of the screen. I change¢ the screen color back to default with¢ a GRAPHICS 0 command and turn the¢ cursor back on again.¢¢ You can now see how easy it was¢ to complete each module and the whole¢ program. Even if you are a beginner¢ you can read and understand this¢ program. It is consistent and it¢ follows the law of straight sequence.¢ You enter at the top and exit at the¢ bottom of the modules. You now can¢ easily modify this program by adding¢ other modules for different envelope¢ sizes if you want to. There was no¢ frustration in writing these modules.¢ It was fun and very satisfying. You¢ do not have to be a super programmer¢ to complete a program like this. If¢ you use modular programming the fun¢ of computing will come back again and¢ your programs will be a joy to read¢ and run.¢¢ The final step is to polish the¢ program. Make sure that tiles are¢ centered on the screen, variables¢ initialized or set to 0, Error¢ Trapping is in place. As the last¢ step I renumber the program. I load¢ it into TURBO BASIC which has a¢ renumber command and write RENUM¢ 10,10,10. This will renumber my¢ program from line 10 on with a 10¢ line interval. Now your program is¢ finished.¢¢ You have seen all the things a¢ good program should have. Here are¢ some of the things that you should¢ avoid.¢¢ Do not create a fancy graphic or¢ logo screen as the first module.¢ Remember the user has to use your¢ program repeatedly. A fancy opening¢ screen says only one thing "Look how¢ clever a programer I am". Conceit¢ like this is hard to bear repeatedly.¢ It is O.K. to have a fancy opening¢ screen on your documentation file¢ because it will be accessed only once¢ or twice and thus can be tolerated.¢¢ Writing good documentation is as¢ important as writing a good program.¢ Documentation should be complete and¢ as brief as possible. Reading a¢ documentation is inherently boring,¢ so make it brief. Do not include in¢ your 'doc' file all the clever¢ programming tricks you used. Do not¢ become verbose. It is O.K. to include¢ printer control codes that might have¢ to be changed but other than that it¢ should have no programming code in¢ it. Also include in the 'docs' your¢ address so a user can contact you.¢¢ Do not compile a program if it¢ is not necessary. There are only two¢ good reasons to compile. One you need¢ a faster speed and two you want to¢ hide your code. A program that¢ depends for its speed on a peripheral¢ device should never be compiled.¢ There would be no point in compiling¢ this program because its speed is¢ determined by the printer.¢¢ Do not use obscure PEEKS and¢ POKES if a regular structure is¢ available. Overused PEEKS and POKES¢ are only justified if your free¢ memory is running out. Obscure and¢ overused PEEKS and POKES say just one¢ thing "I am so clever. You can't¢ follow me." It is another form of¢ program conceit.¢¢ As a last remark I am aware of¢ Dave Small's contempt for structured¢ programming but even he would admit ¢ that a clear organized program is¢ better than spaghetti code. I am a¢ long time member of the:¢ OL' HACKERS ATARI CLUB USERS GROUP,¢ Inc. in in Oceanside NY Your comments¢ and reactions to these articles will¢ be appreciated. Please write to me:¢¢ RON FETZER¢ 22 MONACO AVE.¢ ELMONT N.Y. 11003, USA.¢ * * * *¢