|||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GEnieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP A2Pro! ~ """"""""""""""""""""""""""" ~ Little Orphan Resources ~ ~ KFest 1994 (NOT!) ~ An Introduction to Applesoft ~ ~ New ORCA Things ~ _NO_ Tour of 8/16 Central! ~ ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ GEnieLamp A2Pro ~ A T/TalkNET OnLine Publication ~ Vol.4, Issue 18 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Editor.......................................................Nate Trost Publisher.................................................John Peters Copy-Editor............................................Bruce Maples \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// ~ GEnieLamp IBM ~ GEnieLamp ST ~ GEnieLamp [PR] ~ GEnieLamp Windows ~ ~ GEnieLamp A2Pro ~ GEnieLamp Macintosh ~ GEnieLamp TX2 ~ ~ GEnieLamp A2 ~ LiveWire (ASCII) ~ GEnieLamp MacPRO ~ ~ Solid Windows ~ Config.sys ~ A2-Central ~ ~ Member Of The Digital Publishing Association ~ GE Mail: GENIELAMP Internet: genielamp@genie.geis.com FTP: sosi.com ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ >>> WHAT'S HAPPENING IN THE APPLE A2Pro ROUNDTABLE? <<< """"""""""""""""""""""""""""""""""""""""""""""""""""""" ~ August 1, 1994 ~ FROM MY DESKTOP ......... [FRM] HEY MISTER POSTMAN ...... [HEY] Notes From The Editor. Is That A Letter For Me? A2PRO ROUNDTABLE STAFF .. [DIR] CAMPUS GREEN ............ [CAM] Directory of A2Pro Staff. New A2U Course Begins. LIBRARY BIT BONANZA ..... [LIB] DEVELOPERS CORNER ....... [DEV] HOT Files You Can Download. News From Online Developers. LOG OFF ................. [LOG] GEnieLamp Information. [IDX]""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" READING GEnieLamp GEnieLamp has incorporated a unique indexing """"""""""""""""" system to help make reading the magazine easier. To utilize this system, load GEnieLamp into any ASCII word processor or text editor. In the index you will find the following example: HUMOR ONLINE ............ [HUM] [*]GEnie Fun & Games. To read this article, set your find or search command to [HUM]. If you want to scan all of the articles, search for [EOA]. [EOF] will take you to the last page, whereas [IDX] will bring you back to the index. MESSAGE INFO To make it easy for you to respond to messages re-printed """""""""""" here in GEnieLamp, you will find all the information you need immediately following the message. For example: (SMITH, CAT6, TOP1, MSG:58/M530) _____________| _____|__ _|O__ |____ |_____________ |Name of sender CATegory TOPic Msg. Page number| In this example, to respond to Smith's message, log on to page 475 enter the bulletin board and set CAT 6. Enter your REPly in TOPic 1. A message number that is surrounded by brackets indicates that this message is a "target" message and is referring to a "chain" of two or more messages that are following the same topic. For example: {58}. ABOUT GEnie GEnie's monthly fee is $8.95 which gives you up to four hours """"""""""" of non-prime time access to most GEnie services, such as software downloads, bulletin boards, GE Mail, an Internet gateway, multi-player games and chat lines. GEnie's non-prime time connect rate is $3.00 an hour. To sign up for GEnie, just follow these simple steps. 1. Set your communications software to half duplex (local echo) 8 bits, no parity and 1 stop bit, at 300, 1200 or 2400 baud. 2. Call (with modem) 1-800-638-8369. Upon connection type HHH. 3. Wait for the U#= prompt. Type: JOINGENIE and hit RETURN. When you get the prompt asking for the signup/offer code, type: DSD524 and hit RETURN. 4. Have a major credit card ready, as the system will prompt you for your information. If you need more information, call GEnie's Customer Service department at 1-800-638-9636. SPECIAL OFFER FOR GEnieLamp READERS! If you sign onto GEnie using the """""""""""""""""""""""""""""""""""" method outlined above you will receive an *additional* six (6) free hours of standard connect time (for a total of 10) to be used in the first month. Want more? Your first month charge of $8.95 will be waived! Now there's no excuses! *** GET INTO THE LAMP! *** """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From My Desktop """"""""""""""""""""" o TOP OF THE PAGE >>> TOP OF THE PAGE <<< """"""""""""""""""""""" LOOK AT MY KNEES! ....after I've crawled out from under a most weighty """"""""""""""""" month of July... Okay, that probably doesn't make any sense, but hey, it was the month of KansasFest--I'm still trying to recover! :-) This was the sixth fest (my fifth time in attendance) and it was fun, as always. I really don't have anything to REPORT, however. Honestly. Well, I suppose the Nerf gun wars were interesting (and my fault!), and seeing Bite the Bag again sure was amusing, and Roger Wagner was such a cool guy for buying pizza (thanks Roger!), and the 'dry ice' incident was noteworthy, and a dozen guys going "Wooooooow." in a theatre and...and... It's an experience. Be sure to attend one of these things some year. :-) And roasting Mike Westerfield is much harder than it would appear. The downside to the whole thing was, with people getting READY for KFest, being AT KFest, and recovering FROM KFest, there really wasn't too much going on in A2Pro. Fortunately, KFest was used as an opportunity to dream up some NEW stuff, and I've managed to include one element in this issue (although we're nearly a week late because of it ;-). Behold the latest A2Pro A2 University course: "An Introduction to Applesoft BASIC" taught by A2Pro sysop Nathaniel Sloan. I just had to wait to include this--the introductory lesson is right here in this issue! Enjoy the issue! Nate Trost GEnieLamp A2Pro [EOA] [DIR]////////////////////////////// A2PRO ROUNDTABLE STAFF / ///////////////////////////////// By Nate Trost [A2PRO.GELAMP] ______________________________________________ APPLE II PROGRAMMERS & DEVELOPERS ROUNDTABLE _____ ______ ______________________________________________ /_____|/______\ /__/|__| ___|__| /__/_|__| /_____/ Your Sysops: Greg Da Costa (A2PRO.GREG) /________|/__/ __ __ __ Todd P. Whitesel (A2PRO.TODDPW) /__/ |__|__/______ /_//_// / Nathaniel Sloan (A2PRO.HELP) /__/ |__|________// / \/_/ Nate Trost (A2PRO.GELAMP) [*][*][*] [EOA] [HEY]////////////////////////////// HEY MISTER POSTMAN / ///////////////////////////////// Is That A Letter For Me? """""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] o BULLETIN BOARD HOT SPOTS o PROGRAMS WANTED o PROGRAMMER'S TIPS o MESSAGE SPOTLIGHT >>> BULLETIN BOARD HOT SPOTS <<< """""""""""""""""""""""""""""""" [*] CAT10, TOP15, MSG{56}............Foundation from Lunar Productions [*] CAT11, TOP20, MSG{4}.......................Apple's File Type Notes [*] CAT11, TOP22, MSG{40}.............Patching The Apple IIgs Tool Box [*] CAT20, TOP4, MSG{131}...........................Finder Extensions [*] CAT30, TOP2, MSG{138}.........................Using the GNO Shell [*] CAT36, TOP11, MSG{243}......................................ORCA/C >>> PROGRAMS WANTED <<< """"""""""""""""""""""" EXE/CDA WANTED (BADLY) I'd KILL for a Merlin EXE *OR* CDA that does the """""""""""""""""""""" following... (well perhaps not kill, but pretty darn close!) Allow me to log on to a server, and mount AppleShare volumes. It should accept and save a user name and password, plus the volume name, so after doing it once, I can do it again without having to retype everything. Or if it's an EXE, then I don't mind specifying the parms everytime, because I could put it in a link file. This would save me SO MUCH time! I'll even be your slave for a week! ;-) Regards, Richard (RICHARD.B [Richard], CAT16, TOP7, MSG:54/M530) >>> PROGRAMMER'S TIPS <<< """"""""""""""""""""""""" ORPHANS AND 'CLONES' In his upload of a replacement Foundation.Data """""""""""""""""""" file, Harold mentions orphaned rResourceName strings. What is meant by this? BTW thanks for the upload Harold. Also, though maybe it doesn't belong here except I was using Foundation, I was looking through Spectrum to assign a key equivalent to the Capture Buffer menu item in the Show menu. I noticed some Pascal strings such as ok and cancel were repeated a few times. Is there a reason why they should be duplicated. The same string can be used by more than one, umm, let's see, control I guess, can't it? Mark Wade (M.WADE7 [Googoogajoob], CAT10, TOP15, MSG:56/M530) <<<<< "Orphaned" rResourceName strings are strings which exist for """"" resources which have been deleted. There are two different opinions on the "multiple OK/cancel" thing. I am of the "save as much space as possible" opinion, which would say "Yes, go ahead and link multiple buttons to the same title string". Others, however, feel that a resource referenced (directly or indirectly) by another resource belongs to that resource. Foundation is built around this second principle, which pains me no end. "I want to copy the window. I do NOT want to copy all of its controls as well". (A2PRO.HELP, CAT10, TOP15, MSG:57/M530) >>> MESSAGE SPOTLIGHT <<< """"""""""""""""""""""""" Pointer trivia!! C does not actually specify that 0 is the value of a NULL pointer. It says that 0 can be _cast_ to a pointer and will be equal to NULL, and it says that 0 can be compared to a pointer (after an implied cast to the pointer type). So as far as source code is concerned you can write portable code that uses (void *)0 and the like for NULL, and in fact that is what good C headers do. However, old C headers simply #define NULL 0 and you are stuck with (char *)NULL (these compilers usually aren't ANSI and don't have void *). But nowhere is it required that the bit pattern of a NULL pointer be a numeric zero. This is convenient, so nearly all linear address machines use it. But segmented machines like the x86 wouldn't want to because a zero bit pattern there always gets you segment descriptor zero which may be used already... Because of this, Microsoft hit on the idea of making NULL pointers point to a unique segment descriptor which has its access disabled, so you get a GP fault every time you try to use a NULL pointer to load or store something. (This would be like dropping into GSBug any time your code accidentally dereferenced NULL, pointing right at the instruction that did it. This kind of debugging is available on unix routinely nowadays.) Todd Whitesel (A2PRO.TODDPW [growf?], CAT1, TOP21, MSG:90/M530) [*][*][*] While on GEnie, do you spend most of your time downloading files? If so, you may be missing out some excellent information in the Bulletin Board area. The messages listed above only scratch the surface of what's available and waiting for you in the bulletin board area. If you are serious about your Apple II, the GEnieLamp staff strongly urge you to give the bulletin board area a try. There are literally thousands of messages posted from people like you from all over the world. [EOA] [DEV]////////////////////////////// DEVELOPER'S CORNER / ///////////////////////////////// News From The A2Pro Online Developers """"""""""""""""""""""""""""""""""""" By Nate C. Trost [A2PRO.GELAMP] >>> ONLINE SUPPORT IN A2PRO <<< """"""""""""""""""""""""""""""" CAT TOP COMPANY === === ======= 29 INDEPENDENT DEVELOPERS ONLINE 2 DYA/DigiSoft Innovations Online 8 Simplexity Software Online 14 Quality Computers Q-LABS Online 20 DreamWorld Software Online 26 METAL/FV Software Online 32 Kitchen Sink Software Online 38 EdIt-16 (Bill Tudor) 30 PROCYON, INC. 31 SOFTDISK PUBLISHING 33 GS+ MAGAZINE 34 JEM SOFTWARE 35 PRODEV, INC. 36 THE BYTE WORKS Each month this column feature highlights and news from various developers who provide support via A2Pro. >>> NEWS FROM DIGISOFT <<< """""""""""""""""""""""""" V1.1 T2 SAMPLE CODE Stay tuned for v1.1 of the Twilight II Ball Module """"""""""""""""""" sample source package..bug fixes, and a few new files should make developing T2 modules even easier now! <>> NEWS FROM THE BYTE WORKS <<< """""""""""""""""""""""""""""""" NEW UPGRADES TO THE ORCA LANGUAGES! """"""""""""""""""""""""""""""""""" ORCA/C 2.0.2 ORCA/M 2.0.4 ORCA/Pascal 2.1 For the Apple IIGS Published by Byte Works, Inc. Contact: Mike Westerfield Byte Works, Inc. 4700 Irving Blvd N.W. Suite 207 Albuquerque, NM 87114 (505) 898-8183 AOL: Send e-mail to MikeW50 or visit us using keyword ByteWorks. GEnie: Send e-mail to ByteWorks or visit us in A2, Category 45. Internet: Send e-mail to MikeW50@AOL.COM We've just released new versions of our popular ORCA programming languages. These maintenance updates are part of our continued commitment to the Apple IIGS. Registered owners of ORCA/M 2.x, ORCA/Pascal 2.x and ORCA/C 2.x can update for $7 per product--or you can get an update free if you order a program direct from the Byte Works. Upgrades are also available from earlier versions of the ORCA languages, or from other Apple IIGS languages. Contact the Byte Works for ordering information or details about our current special offers and pricing. (BYTEWORKS, CAT36, TOP3, MSG:235/M530) ANSI C ADVENTURES Trying to use messages with static data in C has me """"""""""""""""" exploring undeclared array sizes and initialization. I don't know what ANSI specifies here, and realize it is tricky area. Basically, I don't know how the compiler should behave here. It doesn't do what I'd like it to do, but I understand that you must stick to ANSI, not to convenience. So, what should the following do? Is it doing the standard thing? static struct { int i; int size; char c[]; int j; } a= {0x0123, sizeof(a), "\pabc", 0x4567"}; static struct { int i; char c[]; int size; int j; } b= {0x89AB, "\pdef", sizeof(b), 0xCDEV}; In a, sizeof() yields 6, treating the string as 0. In b, sizeof() yields 0. Neither of these are what I'd like. What I'd like is for the sizeof initialization to take into account whatever length the initial string is, which requires not filling in the sizeof till the entire initialization is compiled, which is not like C in general. But, forgetting that, is the current behavior correct? Is what I want correct? Related, I'd like to be to able to specify that Pascal strings do not end with a 0. In Toolbox messages, the data falls directly after the Pascal string; I don't want the 0 in there. This might be a good pragma. Not all that useful, but not complicated either. I think MPW C and THINK C differ this way. One puts in the 0 and one doesn't (irrelevant). Actually, this option is somewhat complicated by static initialzation, since something like char c[123]= "abc" does not include a zero (I think it does in C++ and is a compile time error.) The pure C alternatives here are dynamic allocation and address arithmethic, or manually counting the size of the string and declaring the array to be that size. IMHO, manually sizing strings is about the worst thing a programmer has to do that the compiler should. Related, but already mentioned some months ago and shot down, is that I'd like to be able to declare constant Class 1 input/GS strings. One of the better ways around this is using resources, since Rez supports the type. The other way is hand coding and using \123, ick. -- Jay*p ps- typos: CDEV should be CDEF. those hex numbers serve as place holder so I could follow a dump of the file. Also, there was an extra ". The code was on my IIGS and tested, but I transcribed it manually on to the Mac. I'll have to try it with THIHK C now...and gcc and cc and ghcc, well, no, I no longer have acces to ghcc. Todd, ghcc is about the best Unix cc in my limited experience, but I had trouble using the MULTI demo a few months ago.*s (JAY.KRELL, CAT36, TOP11, MSG:243/M530) >>>>> Jay, the sizeof() initializer is illegal according to ANSI. """"" Inside the braces, 'a' is an incomplete type (meaning, usually, that the compiler doesn't know exactly how big it is yet), and sizeof() of an incomplete type is not allowed (ANSI K&R states this at the bottom of the sizeof() discussion on page 204). In practical terms, it could be made legal, but that would require every compiler to have extra logic to go back and fill in any sizeof's that are taken of the object they appear in. ANSI does not forbid compilers from doing this as a feature, but not enough of them (probably very few actually) were doing it when ANSI was spec'ced out so there was little incentive to add it. The primary goal of the standard was to have every compiler agree on _something_ regardless of whether that was the ideal revision of the language in question... (As for MULTI, what do you mean by 'had trouble' ? I would hope that if it is a bug then someone reported it and it got fixed. BTW 'ghcc' is what most customers who won't give up GNU rename our driver to, internally we call it gcc and have for years, but GNU is free and we are not so go figure... Anyway it is always cool to hear from someone who has used it and likes it :) ) Todd Whitesel (A2PRO.TODDPW [growf?], CAT36, TOP11, MSG:244/M530) [EOA] [LIB]////////////////////////////// LIBRARY BIT BONANZA / ///////////////////////////////// HOT Files You Can Download """""""""""""""""""""""""" By Tim Buchheim [T.BUCHHEIM] >>> Merlin 16+ Utilities <<< """""""""""""""""""""""""""""" File # 4217 COPYFORK.BXY V1.7 (GS) Uploaded on 7/10/94 by RICHARD.B About 10K (d/l time approx. 1 minute @ 2400 baud) A replacement for Merlin's COPY command. Supports full GS/OS pathnames and switches for selective fork copying, and rResName and high bit stripping. High bit stripping is handy for batch copies to ORCA or MPW environments, or for input to text editors. Also include date change selection switch and auxtype set switch. File # 4216 WAITFILE.BXY V1.0 (GS) Uploaded on 7/10/94 by RICHARD.B About 4K (d/l time approx. 24 seconds @ 2400 baud) Merlin 16+ EXE which waits for a file to change (mod/create date/time) before continuing. Great for AppleShare where two machines are competing for resources. Allows the IIgs to wait for the file to be updated before using it. File # 4215 HEXDUMP.BXY V1.0 (GS) Uploaded on 7/10/94 by RICHARD.B About 4K (d/l time approx. 24 seconds @ 2400 baud) Merlin 16+ EXE to dump files to either the screen, or a source file in Merlin source code. Includes a switch to output the source code in 7 bit. >>> KeyWin <<< """"""""""""""""" File # 4187 KEYWIN.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 348K (d/l time approx. 34 minutes 48 seconds @ 2400 baud) KeyWin is a set of AppleSoft routines for BASIC programmers to create a desktop interface using the mouse and MouseText graphics. It was developered by Lim Thye Chean of Singapore for his Apple //c and //e machines. Keywin supports pulldown menus, modal and modeless dialogs, check boxes, pushbuttons, scrolling lists, etc. A mouse is recommended but not required. This archive contains all the files in the KW*.BXY archives elsewhere in this library. Freeware. File # 4193 KWWRITE.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 66K (d/l time approx. 6 minutes 36 seconds @ 2400 baud) This is an unfinished KeyWin word processor which has the basic editing features but lacks more advanced functions. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. Source code is included. File # 4192 KWSYSTEM.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 49K (d/l time approx. 4 minutes 54 seconds @ 2400 baud) This is the KeyWin program launcher. Other KeyWin applications can be started from this utility. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. Source code is included. File # 4191 KWOTHELLO.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 68K (d/l time approx. 6 minutes 48 seconds @ 2400 baud) This is an Othello game for the KeyWin system. It features a fast and powerful AI algorithm, 3 difficulty levels, different play modes and display of possible moves. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. Source code is included. File # 4190 KWLIFE.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 54K (d/l time approx. 5 minutes 24 seconds @ 2400 baud) This is Conway's Game of Life (a simple cellular automata simulation) written as a KeyWin application. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. Source code is included. File # 4189 KWDEMO.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 68K (d/l time approx. 6 minutes 48 seconds @ 2400 baud) For programmers... some sample KeyWin source code. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. File # 4188 KWCHECKER.BXY (ALL) Uploaded on 6/27/94 by B.TAO About 64K (d/l time approx. 6 minutes 24 seconds @ 2400 baud) This is the game of checkers using the KeyWin AppleSoft routines. It is included in the KEYWIN.BXY archive, but split off here for users without RAM disks or 3.5" drives. Source code is included. >>> Miscellaneous <<< """""""""""""""""""""""" File # 4230 SPLASHER.BXY V2.60 (GS) Uploaded on 7/27/94 by C.JUNIEL About 203K (d/l time approx. 17 minutes @ 2400 baud) Splasher is a program that lets you add a graphic splash screen and play music when the program starts up. It includes a dynamic segment and a S16 program to edit and save the graphic screen to the programs resource fork. File # 4223 RESLIN.BXY 0.45 (GS) Uploaded on 7/15/94 by RICHARD.B About 71K (d/l time approx. 7 minutes 6 seconds @ 2400 baud) This new version allows you to read Macintosh resource forks and copy them to the IIGS. Include heaps of other manipulations, plug in converters/editor and more. File # 4219 AUDIO.FAQ.BXY (ALL) Uploaded on 7/11/94 by T.MYERS4 About 55K (d/l time approx. 5 minutes 30 seconds @ 2400 baud) This is an Internet FAQ discussing common audio file formats from various platforms. Included are .wav, .au, .snd, and others. This is the most current that I have found. The file was archived using GSk v1.1 with a Bny II wrapper. File # 4214 MACRESLIB.BXY (GS) Uploaded on 7/9/94 by J.MILLS11 About 82K (d/l time approx. 8 minutes 12 seconds @ 2400 baud) This is a combination Library/Demo. Programmers simply access functions in this library to open & read a Mac-style resource IN THE RESOURCE FORK! Writen in Orca/C v2.01 but can be used w/o the C library (hopefully!). File # 4205 CHANGESHL.BXY (ALL) Uploaded on 7/2/94 by B.HANDLER About 1K (d/l time approx. 6 seconds @ 2400 baud) Original 'Shell Game' program that I added a couple of lines to so that it shows what happen when you change shells each time File # 4194 XLOGIN.230A.BXY (GS) Uploaded on 6/27/94 by B.TAO About 55K (d/l time approx. 5 minutes 30 seconds @ 2400 baud) Changes since 2.21: streamlined new interface; on-line application editor removed due to compiler problems; option to shut down the system added; motd displayed in small window. Configuration file format radically changed (please see the manual page for details). Now displays login shells properly in the process table. File # 4184 BC.1.02.BXY (GS) Uploaded on 6/25/94 by B.TAO About 338K (d/l time approx. 28 minutes @ 2400 baud) bc is an arbitrary precision numeric processing language. Syntax is similar to C, but differs in many substantial areas. It supports interactive execution of statements. bc is a utility included in the POSIX P1003.2/D11 draft standard. See included documentation for details. [EOA] [CAM]////////////////////////////// CAMPUS GREEN / ///////////////////////////////// Intro to a New Course """""""""""""""""""""""""" By J. Nathaniel Sloan [A2PRO.HELP] >>> Introduction - The Basics of BASIC: """"""""""""""""""""""""""""""""""""""" In 1976, Apple Computer, Inc., introduced the first practical microcomputer, the Apple I. With the introduction of the Apple I and its predecessors, the Apple II family, Apple found a new market for computers; the home. The idea of a "home computer" was a brand-new one; until this point, computers were only owned by large businesses; even minicomputers were prohibitively expensive. However, Apple faced an interesting problem. They had a computer that could be marketed in the home; however, there wasn't really much that the average American consumer could do with the Apple. After all, computer programming is for experts, right? Wrong. Apple introduced two different implementations of the BASIC language for its Apple II series of microcomputers. The first, Integer BASIC, was fast, but had the limitation that it was, as its name implied, limited to working with integers. The second, Applesoft BASIC, is the language we will be looking at in this course. BASIC, which stands for "Beginners' All-purpose Symbolic Instruction Code" (the words obviously chosen to fit the acronym, and not vice versa), is just that - basic. It's easy enough to be learned quickly, yet powerful enough to do difficult tasks or run complex programs. In this course, we will start from the ground up; in four short lessons, we hope to be able to present enough for you to be fluent in the basics of Applesoft BASIC. >>> Course outline: """"""""""""""""""" <<< Introduction - August 2, 1994 ................................. I. History & General Introduction II. Course Outline III. Background Information A. What are immediate commands? B. What is an interpreted language? IV. Immediate Command Mode - 'Hello, World!' Mark II - the Warner Way A. PRINT B. Variables C. Precedence <<< Lesson 1 - August 9, 1994 ............................. I. Background information A. What is deferred command mode? B. Why would I want to use it? II. VICs - Very Important Commands A. NEW B. LIST C. RUN D. HOME III. Editing A. Deleting one line B. Deleting more than one line C. Cursor movement with the escape key IV. Boolean Logic A. AND B. OR C. NOT D. Precedence, Part II V. Loops A. GOTO B. Counter-based loops C. FOR/NEXT & For/Next Loops D. STEP E. Nested Loops VI. Decisions, decisions; use of IF/THEN VII. Improving program display A. Commas and semicolons in PRINT statements B. TAB() C. HTAB and VTAB <<< Lesson 2 (The Wrath of CHR$("N")) - August 16, 1994 ....................................................... I. Introduction to strings A. What is a string? B. What on earth are they good for? II. String commands A. String variables B. String manipulation commands 1. LEFT$() 2. RIGHT$() 3. MID$() 4. + (the concatenation operator) 5. CHR$() C. Numbers and strings living together 1. VAL() 2. STR$() 3. LEN() III. Introduction to arrays A. OK, so what's an array? B. Uses IV. Arrays A. Dimensions - DIM() B. Array manipulations through sample code C. General discussion of the power of the array <<< Lesson 3 (The Search for Plot) - August 23, 1994 .................................................... I. Introduction II. User Interface A. INPUT and GET B. Text-based menus and jump tables 1. ON... GOTO 2. ON... GOSUB C. Parameter-checking D. Password-protection E. The famous personality profile program III. Data access A. DATA statements B. The READ statement and arrays (them again?) C. Practical applications IV. Disk access A. Control-D and its uses B. OPEN, READ, WRITE, APPEND; a summary C. Using sequential-access text files <<< Lesson 4 (The Voyage HOME) - August 30, 1994 ................................................ I. Low-resolution Graphics Expanded A. Bouncing off the walls B. Bouncing, Mark II - randomly. 1. RND() 2. INT() II. Subroutines A. I wanna flush it a-gain! B. Passing variables to subroutines C. Nested subroutines D. Top-down programming III. Hi-res (it's not just a root beer) A. HGR B. HPLOT.. TO C. HCOLOR= IV. Other interesting Applesoft tidbits A. INVERSE and NORMAL B. SPEED= C. CALL D. POKE and PEEK <<< V. Wrap-Up.. "Class Dismissed!" ..................................... >>> What is immediate command mode? """"""""""""""""""""""""""""""""""" When you enter Applesoft BASIC (usually by running the program "BASIC.SYSTEM" on your startup disk), you're greeted with a copyright notice, a right square bracket, and a flashing cursor. The bracket is actually Applesoft's prompt; its way of telling you "OK, I'm ready to do what you tell me to do." The presence of a prompt means that you're in what's known as "Immediate Command Mode." At this prompt, you can enter any valid command, and it will execute immediately (hence the name). This is good for doing short things in BASIC; however, true programming requires deferred command mode, as discussed in the next lesson. >>> OK, so what is an interpreted language? """"""""""""""""""""""""""""""""""""""""""" Applesoft BASIC is an interpreted language. When you write a BASIC program, it is not in a format that the computer can immediately understand. Instead, Applesoft BASIC itself is utilized to interpret the information in the program and instruct the computer (which can only understand ones and zeroes, remember) so it knows what in the world you're talking about. >>> Hello, World, Warner Style; your first response. """""""""""""""""""""""""""""""""""""""""""""""""""" NOTE: The following commands, to be effective, must be typed exactly as shown once BASIC is active. That is, to use the commands shown, you need to leave whatever program you're using to read this (taking a printout with you might be a good idea!), go to Applesoft, and enter the commands as they appear here. There is a school of programming thought which holds that the most important experience in learning to program is the first step; that time when you first get your computer to do what you tell it to do. This style of thought, called the "Hello, World" dogma, is quite appropriate for BASIC, because it really doesn't get any harder than the first statement. We've adapted that dogma (with minor changes), and it thus brings me great pleasure to present... your first programming statement! At a BASIC prompt, enter the following line: PRINT "Hello, Nurse!!!" (and hit RETURN. You should always hit RETURN any time you're telling Applesoft to do something). Applesoft will echo, Hello, Nurse!!! Pat yourself on the back. You're now a programmer. :-) >>> Using variables in Applesoft """""""""""""""""""""""""""""""" Now that you've made the computer tell it to do, I'm sure you're full of ideas as to what you want it to do next. (Will it do the dishes? My kid's homework? Wash the car?) However, take a look at the following example (feel free to type it in if you like; you learn Applesoft by DOING, not just by reading). PRINT "Abraham Lincoln was a friend of mine." PRINT 1860 PRINT "Abraham Lincoln was a friend of mine." PRINT 1861 PRINT "Abraham Lincoln was a friend of mine." You'll notice something about the preceding lines; 1860 and 1861 aren't enclosed in quotes. However, if you were typing them in as you go, you noticed that the computer faithfully echoed the correct answer. So why are the quotes present on the other lines? Enterprising students have already tried the next example, I'm sure... PRINT Abraham Lincoln was a friend of mine. Your Apple II will respond with: 0 ?SYNTAX ERROR This introduces two important Applesoft concepts; variables and reserved words. A variable is like a pigeonhole where a value is stored. It is referred to by a label, which can be any length (though only the first two characters are significant- APple, APplesauce, and APolstery all refer to the same value). "Well, that's all well and good," you say, "why the error? I thought a sin tax was what President Clinton was going to put on cigarettes and alcohol!" "Syntax" is a computer-ese word for "format"; Applesoft didn't understand the format of your last request. The _reason_ that it didn't understand is simple... here's what your PRINT statement looked like to Applesoft: PRINT ABRAHAMLINCOLNWASAFRI END OFMINE. You'll notice that "END" is set apart from the rest of the statement. This is because "END" is a reserved word in Applesoft; it's the word that tells the interpreter that you want to end the program (wonder where they got the name?) So, the interpreter looked at your last statement, and said "Ah, hah! The budding programmer at the keyboard wants me to show him the value of ABRAHAMLINCOLNWASAFRI. Since only the first two letters of a variable name are important, I'll just look up AB. Ah, it has no value, because the programmer never gave it one. I know what to do; I'll display a zero!" However, the interpreter then ran into a snag. "Wait a second. I'm still in the middle of a PRINT command, and now all of a sudden, I'm supposed to end? Something's not right here..." and replies with the error message you saw. Now, variables wouldn't be of much use if they always displayed a zero. Thus, Applesoft provides a mechanism to set the value of a variable with a simple little command... LET. LET A = 1 LET X = 4 PULL = 5 PUSH = PULL - 4 Y = X - 6 Y = Y - 1 PRINT A PRINT X PRINT PULL PRINT PUSH PRINT Y Applesoft should respond with the following: 1 4 1 1 -3 HINT: The command "?" is equivalent to typing "PRINT". Looking over Applesoft's responses, you'll note that printing PULL didn't give the same answer that you gave it.... ah, hah! The-old "two-character" rule strikes again. When you typed "PUSH = PULL - 4", Applesoft read it as "PU = PU - 4", and so it overwrote the old value with the new one. Always be careful when using variables like this!! Also, how come commands like PULL = 5 worked without the "LET" statement? Well, it's because in Applesoft, LET is a very common command. So common, in fact, that you can leave it out entirely, and the interpreter is smart enough to figure out what you actually wanted to do, and act accordingly. Variables are an important part of Applesoft, and we'll be using them extensively throughout the rest of the course. >>> Precedence: """"""""""""""" Stop and think about the next command before you type it in; what do you think the answer will be? PRINT 2+5*8-12/4 Did you say 11? Applesoft says 39. Why? Well, it follows something known in the world of mathematics as the "Standard Order of Operations". It can be remembered through various memory aids, such as "Please Excuse My Dear Aunt Sally". Here it is: Parentheses. Anything within parentheses is evaluated first Exponents. Any exponents (signified in Applesoft with the caret) are evaluated first. Multiplication and Division are then evaluated, as they appear left-to-right in the problem. Addition and Subtraction are performed last, again left-to-right. So, when Applesoft sees 2+5*8-12/4, it first reduces the problem to 2+40-3 by evaluating the multiplication, left to right, and then to 39, by doing the addition and subtraction. That's all for this week.. next week's course should be available soon, so keep an eye out for it! Copyright (C) 1994 by the Apple II Programmers RoundTable on GEnie. All Rights Reserved. [EOA] [LOG]////////////////////////////// LOG OFF / ///////////////////////////////// GEnieLamp Information """"""""""""""""""""" o COMMENTS: Contacting GEnieLamp o GEnieLamp STAFF: Who Are We? GEnieLamp Information GEnieLamp is published on the 1st of every month """"""""""""""""""""" on GEnie page 515. You can also find GEnieLamp on the main menus in the following computing RoundTables. RoundTable Keyword GEnie Page RoundTable Keyword GEnie Page """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" DigiPub DIGIPUB 1395 Atari ST ST 475 Macintosh MAC 605 IBM PC IBMPC 615 Apple II A2 645 Apple II Dev. A2PRO 530 Macintosh Dev. MACPRO 480 Geoworks GEOWORKS 1050 BBS BBS 610 CE Software CESOFTWARE 1005 Mini/Mainframe MAINFRAME 1145 Programming PROGRAMMING 1445 Data Comm. DATACOMM 1450 Windows WINDOWS 1335 GEnieLamp is also distributed on CrossNet and many public and commercial BBS systems worldwide. o To reach GEnieLamp on Internet send mail to genielamp@genie.geis.com o Current issues of all versions of GEnieLamp are File Requestable (FREQable) via FidoNet (Zones 1 through 6) from 1:128/51 and via OURNet (Zone 65) from 65:8130/3. SysOps should use the following "magic names" to request the current issue of the indicated GEnieLamp platform (FREQ FILES for names of back issues of GEnieLamp IBM): Platform Magic Name To Use """""""" """"""""""""""""" GEnieLamp IBM .................. GLIBM GEnieLamp ST ................... GLST GEnieLamp A2Pro ................ GLA2PRO GEnieLamp Macintosh ............ GLMAC GEnieLamp TX2 .................. GLTX2 GEnieLamp A2 ................... GLA2 GEnieLamp Windows .............. GLWIN o Back issues of GEnieLamp are available in the DigiPub RoundTable Library #2 on page 1395 (M1395;3). o GEnieLamp pays for articles submitted and published with online GEnie credit time. Upload submissions in ASCII format to library #42 in the DigiPub RoundTable on page 1395 (M1395;3) or Email it to GENIELAMP. On Internet send it to: genielamp@genie.geis.com o We welcome and respond to all E-Mail. To leave comments, suggestions or just to say hi, you can contact us in the DigiPub RoundTable (M1395) or send GE Mail to John Peters at [GENIELAMP] on page 200. o If you would like to meet the GEnieLamp staff "live" we meet every Wednesday night in the Digi*Pub Real-Time Conference at 9:00 EDT (M1395;2). o The Digital Publishing RoundTable is for people who are interested in pursuing publication of their work electronically on GEnie or via disk-based media. For those looking for online publications, the DigiPub Software Libraries offer online magazines, newsletters, short-stories, poetry and other various text oriented articles for downloading to your computer. Also available are writers' tools and 'Hyper-utilties' for text presentation on most computer systems. In the DigiPub Bulletin Board you can converse with people in the digital publishing industry, meet editors from some of the top electronic publications and get hints and tips on how to go about publishing your own digital book. The DigiPub RoundTable is the official online service for the Digital Publishing Association. To get there type DIGIPUB or M1395 at any GEnie prompt. >>> GEnieLamp STAFF <<< """"""""""""""""""""""" GEnieLamp o John Peters [GENIELAMP] Publisher/Editor """"""""" IBM o Bob Connors [DR.BOB] IBM EDITOR """ o Nancy Thomas [N.NOWINSON] MultiMedia Editor/Writer o Brad Biondo [B.BIONDO] IBM Staff Writer o Tika Carr [T.CARR4] IBM Staff Writer o Dave Nienow [D.NIENOW] IBM Staff Writer o Don Lokke [D.LOKKE] Cartoonist o Sandy Wolf [S.WOLF4] Contributing Columnist WINDOWS o Tippy Martinez [WIN.LAMP] WINDOWS EDITOR """"""" o John Osarczuk [J.OSARCZUK] Asst Editor/Columnist o Rick Ruhl [RICKER] Windows Sysop/Columnist o Brad Biondo [B.BIONDO] Windows Staff Writer o Rick Pitonyak [R.PITONYAK] Windows Staff Writer o Ed Williams [E.WILLIAMS24] Windows Staff Writer o Dave Nienow [D.NIENOW] Windows Staff Writer MACINTOSH o Richard Vega [GELAMP.MAC] MACINTOSH EDITOR """"""""" o Tom Trinko [T.TRINKO] Mac Staff Writer o Bret Fledderjohn [FLEDDERJOHN] Mac Staff Writer o Ricky J. Vega [GELAMP.MAC] Mac Staff Writer ATARI ST o John Gniewkowski [GENIELAMP.ST] ATARI ST EDITOR """""""" o Mel Motogawa [M.MOTOGAWA] ST Staff Writer o Sheldon Winick [S.WINICK] ST Staff Writer o Terry Quinn [TQUINN] ST Staff Writer o Richard Brown [R.BROWN30] ST Staff Writer o Al Fasoldt [A.FASOLDT] ST Staff Writer o Fred Koch [F.KOCH] ST Staff Writer ATARI ST/TX2 o Cliff Allen [C.ALLEN17] EDITOR/TX2 """""""""""" ATARI [PR] o Bruce Faulkner [R.FAULKNER4] EDITOR/GEnieLamp [PR] """""""""" APPLE II o Doug Cuff [EDITOR.A2] EDITOR """""""" o Phil Shapiro [P.SHAPIRO1] A2 Staff Writer o Darrel Raines [D.RAINES] A2 Staff Writer o Gina E. Saikin [A2.GENA] A2 Staff Writer o Charlie Hartley [C.HARTLEY3] A2 Staff Writer A2Pro o Nate C. Trost [A2PRO.GELAMP] EDITOR """"" o Tim Buchheim [T.BUCHHEIM] Co-Editor ETC. o Jim Lubin [J.LUBIN] Add Aladdin Scripts """" o Scott Garrigus [S.GARRIGUS] Search-ME! o Mike White [MWHITE] (oo) / DigiPub SysOp o Susie Oviatt [SUSIE] ASCII Artist o Al Fasoldt [A.FASOLDT] Contributing Columnist o Phil Shapiro [P.SHAPIRO1] Contributing Columnist o Sandy Wolf [S.WOLF4] Contributing Columnist \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// Bulletin board messages are reprinted verbatim, and are included in this publication with permission from GEnie and the source RoundTable. GEnie, GEnieLamp Online Magazines, and T/TalkNet Online Publishing do not guarantee the accuracy or suitability of any information included herein. Opinions expressed are those of the individual, and do not represent opinions of GEnie, GEnielamp Online Magazines, or T/TalkNet Online Publishing. Material published in this edition may be reprinted under the follow- ing terms only. Reprint permission granted, unless otherwise noted, to registered computer user groups and not for profit publications. All articles must remain unedited and include the issue number and author at the top of each article reprinted. Opinions present herein are those of the individual authors and do not necessarily reflect those of the publisher or staff of GEnieLamp. We reserve the right to edit all letters and copy. Please include the following at the end or the beginning of all reprints: \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////////// (c) Copyright 1994 T/TalkNET Online Publishing and GEnie. To join GEnie, set your modem to 2400 baud (or less) and half duplex (local echo). Have the modem dial 1-800-638-8369. When you get a CONNECT message, type HHH. At the U#= prompt, type: JOINGENIE and hit the [return] key. When you get the prompt asking for the signup code, type DSD524 and hit RETURN. The system will then prompt you for your sign-up information. Call (voice) 1-800-638-9636 for more information. ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ [EOF]