|||||| |||||| || || |||||| |||||| || || ||| || || || || ||| |||| |||||| || |||| Your || || || || ||| || || |||||| |||||| || || |||||| |||||| GEnieLamp Computing || |||||| || || |||||| RoundTable || || || ||| ||| || || || |||||| |||||||| |||||| RESOURCE! || || || || || || || ||||| || || || || || ~ WELCOME TO GENIELAMP A2Pro! ~ """"""""""""""""""""""""""" ~ My Dinner with the Finder ~ ~ A2U Applesoft Course Wraps ~ ~ Graphic File Formats ~ Applesoft Antics ~ ~ HOT NEWS, HOT FILES, HOT MESSAGES ~ ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ GEnieLamp A2Pro ~ A T/TalkNET OnLine Publication ~ Vol.4, Issue 20 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 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? <<< """"""""""""""""""""""""""""""""""""""""""""""""""""""" ~ October 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. A2U Course Marches On. LIBRARY BIT BONANZA ..... [LIB] DEVELOPERS CORNER ....... [DEV] HOT Files You Can Download. News From Online Developers. RTC Watch ............... [RTC] LOG OFF ................. [PUB] Happenings in A2Pro RTCs. 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. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" [EOA] [FRM]////////////////////////////// FROM MY DESKTOP / ///////////////////////////////// Notes From My Desktop """"""""""""""""""""" o TOP OF THE PAGE >>> TOP OF THE PAGE <<< """"""""""""""""""""""" WHERE DID I PUT THOSE WORDS? Well, I'm rather at a loss for words this """""""""""""""""""""""""""" issue. We've got a range of topics, everything from Applesoft to Finder Extensions to new graphics file formats. It's been a rather busy month for me as I've been working on a new job, so I think I'll just cut to the usual... Enjoy the issue! :-) Nate Trost GEnieLamp A2Pro [EOA] [DIR]////////////////////////////// A2PRO ROUNDTABLE STAFF / ///////////////////////////////// By Nate Trost [A2PRO.GELAMP] ______________________________________________ APPLE II PROGRAMMERS & DEVELOPERS ROUNDTABLE _____ ______ ______________________________________________ /_____|/______\ /__/|__| ___|__| Head Sysop: Hangtime (HANGTIME) /__/_|__| /_____/ 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 PROGRAMMER'S TIPS o HOT TOPICS o MESSAGE SPOTLIGHT >>> BULLETIN BOARD HOT SPOTS <<< """""""""""""""""""""""""""""""" [*] CAT6, TOP14, MSG{128}........................Programming in Pascal [*] CAT11, TOP26, MSG{1}..............VGA Graphics & Animation Formats [*] CAT16, TOP22, MSG{65}.....................Program Preference Files [*] CAT16, TOP23, MSG{1}........................................MOSAIC [*] CAT18, TOP3, MSG{17}.................................Stack Design [*] CAT30, TOP3, MSG{127}...............................GNO Utilities >>> PROGRAMMER'S TIPS <<< """"""""""""""""""""""""" BASIC MODIFICATIONS I'm interested in making a little Basic program. All """"""""""""""""""" it does is modify certain locations in a file. I have all the locations and new values, but I'm not sure of the easiest way to do it. For example, this is the data Address New Value 014F 44 0188 3E 0220 43 .... (hundred more) Is there an easy way to do this such as (scuse the non-command) 5 Open "File.sys" 10 Poke 014F,44 20 Poke 0188,3E 30 Poke 0220,43 (I think you get the drift...) (I know about using DATA/FOR-NEXT etc...I'm not sure about poking etc.) From what little I know, I think you have to change everything to decimal first before you poke (right?) or do you? This will hopefully be for a game patch that quite a few people are looking for. (J.FENSKE2, CAT9, TOP7, MSG:141/M530) <<<<< First of all, yes, you have to change everything to decimal before """"" you poke. :( Secondly, the line "Open 'File.Sys'" won't work. First of all, you must use the BASIC syntax: PRINT CHR$(4); "OPEN FILE.SYS" Also, you'll want to tell BASIC where to load the file (you wouldn't want to get your code and variables stomped on). Also, unless this is a really small game, you're going to have to load it in chunks. HOWEVER... you don't want the OPEN statement anyhow. :) PRINT CHR$(4); "BLOAD FILE.SYS,TSYS,A$0300,L$0100,B"; X Let X be the decimal offset into the file. In the above example, you're loading $100 bytes at location $300 (this is the only place BASIC will understand hex, BTW). You're using a file of Type (T) SYS, at Byte Offset (B) specified in X. For example, let's say I had a file that I knew was $1000 bytes long. I might do something like this: PRINT CHR$(4); "BLOAD FILE.SYS,TSYS,A$0300,L$0100,B";X REM Do my pokes here PRINT CHR$(4); "BSAVE FILE.SYS,TSYS,A$0300,L$0100,B";X X = X + 256 IF X < 4096 THEN X = X + 256 : GOTO TheTop Of course, if this were true BASIC code, you'd need line numbers, and the "GOTO TheTop" in the last line would have to be replaced with a "GOTO RealLineNumber". But, I think that this should give you the basic idea. (A2PRO.HELP [ Sloanie ], CAT9, TOP7, MSG:143/M530) >>>>> Well... I'm a bit rusty with BASIC.System, but I'm pretty sure """"" that open also supports the T parameter (i.e., ?d$"open file.sys,tsys"). It is probably easier to use bload/bsave though >> PRINT CHR$(4); "BLOAD FILE.SYS,TSYS,A$0300,L$0100,B"; X ^^^^^^ ACK!!!!! DON'T DO THIS!!!! only the first $b0 bytes of page 3 are free! You'll overwrite several important vectors if you try to use the whole page. >> Let X be the decimal offset into the file. In the above example, >> you're loading $100 bytes at location $300 (this is the only place >> BASIC will understand hex, BTW). You're using a file of Type (T) >> SYS, at Byte Offset (B) specified in X. I know I'm being pedantic here, but it's not BASIC that's understanding hex, it's BASIC.System. I'd suggest you put your long list of pokes in a series of data statements. Then you could use code like the following: 10 d$ = chr$(4) : rem "Control D 100 read loc,nv : if not loc and not nv then 999 : rem "End of data 110 gosub 1000 : rem "The patch subroutine 120 goto 100 : rem "keep going 999 end : rem "done patching. Your data statements would look like this: 5000 data 123,5 5010 data 128,0 ... 5999 data 0,0 : rem "This is the end of data Of course, you can put multiple data pairs on one line, but this way is proabably easier to read. The subroutine that does the actual work could be as simple as this: 1000 poke 768,nv :rem "768 = $0300 1010 print d$"bsave file.sys,tsys,a$300,L1,b"loc 1020 return Of course, since you said you had several bytes to patch, this method will be rather slow because of all of the file access. Here's an off-the-cuff faster version: 10 d$ = chr$(4) : ?d$"bload file.sys,tsys,a$300,e$3cf" : bs = 0 : be = 208 : bl = 208 --> (note the addition to line 10 for this version!) 20 fl = 9999 :rem "Put the ACTUAL file length of the file here!!!! --> (get the length from the long catalog of the file) 999 ?d$"bsave file.sys,tsys,a$300,l"bl",b"bs : end :rem "save the last seg --> (...and this change, too!) 1000 if loc < be then poke 768+(loc-bs),nv : return 1010 ?d$"bsave file.sys,tsys,a$300,l"bl",b"bs : rem "save this segment 1020 bs = be : be = be + 208 : rem "Update where we're looking at 1030 if be > fl then bl = 208-(be-fl) : be = fl 1040 if bl <= 0 then stop : rem "Ran out of file before end of patches! 1050 ?d$"bload file.sys,tsys,a$300,l"bl",b"bs :rem "load next piece 1060 goto 1000 : rem "try again Note that if a particular span of 208 bytes in the file has no patches, it's still saved. You could check for this, but it's probably not worth it for the small gains in speed you'd get. If you have a LOT of patches and don't want to convert all of your numbers to decimal, you could enter the data pairs as your hex numbers like the following: 5000 data a0d,ff ... 5999 data "$end","$end" Then you would change line 100 to (& add 105): 100 read loc$,nv$ : if loc = "$end" then 999 : rem "End of data 105 gosub 800 : rem "convert hex to dec And here's the hex to dec subroutine: 800 hex$ = loc$ : gosub 900 : loc = dec : rem "convert loc... 810 hex$ = nv$ : gosub 900 : nv = dec : rem "...and nv 820 return 900 dec = 0 : for j = 1 to len( hex$ ) : k$ = mid$(hex$,j,1) 910 if k$ < "0" then stop : rem "ERROR! digit < "0" 910 if k$ < ":" then k = val( k$ ) : goto 950 920 if k$ < "A" then stop : rem "ERROR! digit > "9" & < "A" 930 k = asc( k$ ) - 55 : if k > 41 then k = k-32 940 if k > 15 then stop : rem "ERROR! digit > "f" or "F" 950 dec = dec * 16 + k 960 next : return I know that this is rather larger than the previous example, but it'll probably be easier if you don't hard-code the pokes; remember: data statements are our friends :) A word of warning, though: I wrote all of this code off the top of my head, so it's untested. Let me know if there's any problems and I'll actually try running it & post whatever fixes are needed :) Bob Claney (CLANEY, CAT9, TOP7, MSG:144/M530) MODULA-2 BOOKS For anybody who is interested, """""""""""""" I came upon the following books on Modula-2 in the library (I seem to remember a while back that someone was asking for a book on Modula-2) but since I am still fighting with C, I haven't looked them over for quality or content: --------------------------------------------------------------- Author: Wiatrowski, Claude A. Title: From C to Modula-2 and back, bridging the language gap Published: New York: Wiley, c1987 ISBN: 0471854948 (pbk.) --------------------------------------------------------------- Author: Chirlian, Paul M. Title: Introduction to Modula-2 Published: Beaverton, Or.: Matrix Publishers, c1984 ISBN: 091646041X (pbk.) --------------------------------------------------------------- Author: Greenfield, Stuart B. Title: Invitation to Modula-2 Published: Princeton,NJ: Petrocelli Books, c1985 ISBN: 0894332732 --------------------------------------------------------------- Author: Thalmann, Daniel Title: Modula-2: an introduction Published: Berlin; New York: Springer-Verlag, c1985 ISBN: 038713297X (U.S.: pbk) --------------------------------------------------------------- Author: Gleaves, Richard Title: Modula-2 for Pascal programmers Published: New York: Springer-Verlag, c1984 ISBN: 0387960511 (pbk.) --------------------------------------------------------------- Author: Harter, Edward D. Title: Modula-2 programming: a first course Published: Englewood Cliffs, NJ: Prentice Hall, c1990 ISBN: 013596024X ---------------------------------------------------------------- There are about 20 or so more Modula-2 books in the library on more advanced and/or specialized topics. If anyone wants me to post those titles and publishing info let me know. Eric Heim (E.HEIM3 [eric], CAT14, TOP4, MSG:29/M530) WHAT'S....MISSING?!?! This isn't exactly about a 'new' upload but it'll """"""""""""""""""""" have to do. I downloaded HCGS last night (file #3901, the whole program) without incident. However, the "What's New" stack mentioned in the readme file doesn't appear to be in the archive. I'm behind the curve I know but better late than never, right! What gives? Is it just missing or am I missing? (LKRUPP, CAT1, TOP30, MSG:99/M530) <<<<< The HCGS "All in one" archive IS missing the "What's New" stack. """"" This is because Apple's release license required us to upload them as they were, and the "What's New" stack was not on the release disk that was being used. One of the other archives DOES have the "What's New" stack in it, but I don't remember which one it was... Dave (JUST.DAVE, CAT1, TOP30, MSG:101/M530) UNLOADING FEXTS OK, so back to the question I posed earlier... """"""""""""""" ...and since Bill seems to be hanging around alot these days, i'll direct my questions with XManager in mind. Like I said before, I have 2 FExts installed in the FinderExtras folder. Each has essentially the same code for srqGoAway, yet one can be removed by XManager, and the other one cannot. What makes a FExt unable to be unloaded? Second, what is XManager doing to unload a FExt? You say "one has to wait for the Finder to remove a FExt" (gross paraphrase), yet XManager seems to do it just fine... what gives? Rick (R.ADAMS48 [Rick], CAT20, TOP4, MSG:169/M530) <<<<< "one has to wait for the Finder to remove a FExt" """"" I would guess that this is because Finder Extensions can't remove menu items except during finderSaysIdle, at which time XManager should be sending a finderSaysGoodbye call and then a srqGoAway request. As for your question about being able to remove one and not the other, well, I don't have any ideas. :( (A2PRO.HELP [ Sloanie ], CAT20, TOP4, MSG:170/M530) >>>>> OK, from memory... """"" XManager send the srqGoAway request. If the extension accepts this request and sets its userID properly (I forget exactly, but your supposed to put your userID somewhere in my DataOut buffer - check to make sure you are using the correct userID and accepting the request), i.e., it matches what XManager thinks it is, then XManager sends some more requests to the INIT following the example in the IR source code (I did not want to askIR to remove...this way IR is only required for XManager to install). Anyway, if all goes well then XM removes the request proc and calls user shutdown on the fellow. Now, XManager does not let you re-install this _same_ init until XManager exits and Finder gets to "run" for a little while. This is not really because it would cause trouble in this situation, BUT, if you do this whole thing twice (remove, install, remove, then install) the SAME FX without letting Finder go through its event loop, SOME FX's will crash. To make things "simpler", after removing an FX you are not allowed to install the same one until letting Finder go through its event loop (XManager is modal). Consider, as an example, a Finder Extension that does some things automatically (like bring up windows or buttons bars or something) when Finder starts up. This type of extension might key off the first "finderSaysIdle" (rather than finderSaysHello), or, an extension might install a little heartbeat handler at finderSaysHello time and do something a little later when finder is not busy. In either of these cases, things can get a little "goofy" if you install and extension TWICE without allowing the full "install" (i.e., right through to the Finder event loop) to take place. Of course, a properly-written FX would, as an example, not respond "OK" to an srqShutdown request if it had a heartbeat handler still installed, but instead of taking a chance (after all, most people only test their FX's during a "real" Finder startup), the restriction was added to XManager. I hope it does not inconvienience people too much. There were 2 FX's that crashed as described above. I figure a little inconvienience is better than a crash. Bill {W.TUDOR} PS: The above was from memory so it may not be described perfectly. :-) (W.TUDOR, CAT20, TOP4, MSG:171/M530) <<<<< As I recall the IR source code, you're supposed to put a """"" finderSaysGoodbye call -before- the srqGoAway call for Finder Extensions. This causes problems (as noted in the source code) if the FEx decides -not- to accept the srqGoAway (you could -try- another FinderSaysHello immediately after a non-accepted srqGoAway); however, since FExes can reasonably assume that they have no need to be connected to the system in any way (and, in fact, they should remove their IPC handlers). I'm 99.98% positive that this is what you -meant- to say (otherwise, I seriously doubt that XManager would work), so it's probably just a clarification for those reading along. OTOH, perhaps you should check your code (and IR's code) one last time. :) (A2PRO.HELP [ Sloanie ], CAT20, TOP4, MSG:172/M530) >>>>> I believe that XManager does send the FinderSaysGoAway first """"" 'cause this is where I found my problem... My reponse to srqGoAway was to call the same code as FinderSaysGoodbye calls. Not necessarily bad, except that I wasn't prepared for the routine to be run twice so the srqGoAway call was not being accepted. Well, as you all know fixing one bug creates another so I spent all night making my FExt loadable/unloadable. :) Thanks for the help, Rick (R.ADAMS48 [Rick], CAT20, TOP4, MSG:173/M530) <<<<< Yes, check the code, calls finderSays Goodbye first. I used IR """"" (source code) to figure out what to do. XM does the same thing IR does. There were just a couple of FX's that could not handle being "installed" twice without a finderSaysIdle and/or SystemTask being called for them in between. Thats why there's a built-in restriction in XM regarding install/remove/install all in one shot. Anyway, if XM was modeless there would be no problem, but if it was modeless it would have to keep on "checking" (in case the user installed/removed an FX by some other means). Rick: In response to srqGoAway, just accept if it is "safe" for someone to call UserShutdown on you or make it safe and accept or don't accept. The peson you sends the srqGoAway is supposed to be smart enough to take care of everything else. "Safe" means: (1) You have no IRQ handlers, etc. installed. Your code is going away so you have to remove these. (2) You have no patches installed. Again, your code is going away. (3) You have no heartbeat queue, OOM queue, disk insertion handlers, ... Gee, I can;t think of any more, but basically remove all your little "hooks" because your going away. If you can;t remove the hooks then don't accept. Did I forget something ? (W.TUDOR, CAT20, TOP4, MSG:174-175/M530) >>>>> >> Did I forget something ? """"" uh huh... If the F/X being removed had obtained a new ID, it should dispose of it. If the new ID was used to obtain any memory, that memory should first be disposed of and then dispose of the ID. (there are times when a new ID is preferable to fudging up an aux ID...) -Harold (H.HISLOP [CryptKeeper], CAT20, TOP4, MSG:176/M530) FINDERSAYSFUN I'm having further problems with my "intercept """"""""""""" FinderSaysBeforeCopy" FExt. When someone wants to copy something to the System folder, the Finder puts up the lovely dialog asking if the user wants it to go where it belongs. Well, this alert occurs before the finderSaysBeforeCopy IPC, and no matter what the user answers, the path passed in the dataIn for the destination path is the System folder (not the System:DeskAccs, System:CDevs, etc.). It seems the Finder keeps the answer to the dialog box to itself until the finderSaysBeforeCopy call is returned to it un-aborted. How is someone supposed to deal with such a situation? Was the finderSaysBeforeCopy call not supposed to be used as an entry to "substitute" copying? Did the planners of this particular action in the Finder not get it completely right? (my vote) What are some suggestions as to how this should be done...? Rick (R.ADAMS48 [Rick], CAT20, TOP7, MSG:16/M530) <<<<< No, finderSaysBeforeCopy isn't made so you can substutute copying. """"" All you can do is cancel the copy process. Or move process, since finderSaysBeforeCopy is sent before ChangePath calls are made as well as for copying. (WANKERL [Joe], CAT20, TOP7, MSG:17/M530) >> No, finderSaysBeforeCopy isn't made so you can substutute copying. >>>>> Well, to bad! :-P I'm going to do it anyway. :) """"" Is there any "trick" to disabling this feature of Finder (the "place this file where it belongs" alert)? Rick (R.ADAMS48 [Rick], CAT20, TOP7, MSG:18/M530) <<<<< You can substitute copying by doing the copy yourself, and then """"" telling Finder to abort the copy, but that's a side effect, not a feature... >> Is there any "trick" to disabling this feature of Finder (the "place >> this file where it belongs" alert)? Sure... patch the Finder in memory when you get the FinderSaysHello message. Where to put the patch? Beats me. If you've got a disassembler, I bet you could figure it out... This is rather dirty, though, and unless you've got a REAL good reason for doing it, I wouldn't recommend it. Dave (JUST.DAVE, CAT20, TOP7, MSG:19-20/M530) >>> HOT TOPICS <<< """""""""""""""""" 256-COLOR FILE FORMATS With Sequential Systems' 'Second Sight' VGA card """""""""""""""""""""" in development, the IIGS community will need some file format standards for 256-color VGA quality images and movies. Suggestions are welcome. I am currently thinking in terms of borrowing PC VGA file formats, but some IIGS file formats might well be extensible to handle VGA images. Let's hear it! Jawaid (PROCYON.INC, CAT11, TOP26, MSG:1/M530) >>> MESSAGE SPOTLIGHT <<< """"""""""""""""""""""""" Sorry, guys. While some of the string processing languages may do it, I can't name a language that allows strings to be used as case statement labels. K.McFarland, what you're trying to do is, in essence, to write a simple parser. A parser is a program that reads text and figures out what symbolic information the text contains. In your case, you're looking for simple words as input, so things can be kept fairly simple. The simplest case is to assume that the user will type your one-word response just as you expect, say in all lowercase letters with no spaces at either side. In that case, you can parse th4e input with simple if-then statements, like this: var word: string; response: wordType; begin readln(word); if word = 'mouse' then response := mouse else if word = 'cat' then response := cat ... This can get tedious very fast, so in parsers with more than a few words, you'll see an array of the words set up in a different location as the program is initialized, like this: var words: array[wordType] of string[8]; begin words[mouse] := 'mouse'; words[cat] := 'cat'; ... This makes it easy to add new words. The parser doesn't change as you add new words, either. A simple parser looks like this: readln(word); done := false; response := mouse; while not done do begin if words[response] = word then done := true else if response = elephant then begin done := true; <<>> end {else if} else response := succ(response); end; {while} If you have lots of words, and time is an issue, there are ways to speed this process up quite a bit. The best place to look for some ideas is in an older compiler book that uses a hand-written scanner and parser. Usually, you'll want to make your parser just a little more sophisticated. The first step is to write a subroutine that preprocesses the input word. It should strip any leading or trailing whitespace and convert all characters to lowercase. The second step is a little more fun. You can use Pascal's pos function to search the input line for one of the words in your parse list. This works _great_ for adventure games. By searching a long string for a match, you'll get a hit when the user types something like this: I just bought a cat. What do I do now? You can find more information on simple parsers and how to use them in lesson 13 of "Learn to Program in Pascal." See Cat 36 or send me you're mailing address if you'd like more information. Mike Westerfield (BYTEWORKS, CAT6, TOP14, MSG:131/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 THE BYTE WORKS <<< """""""""""""""""""""""""""""""" PUBLISH, SUBSCRIBE AND QUESTION Mike, """"""""""""""""""""""""""""""" Could you please start up a topic here to cover Publish & Subscribe questions, suggestions, etc? (if there already is such a beast, I couldn't find it, I even grabbed a fresh index to look for it :) I've studied the files that you uploaded on this, and have some questions. 1) PBLS and PBGS atoms - You state that either is acceptable, but that PBGS is prefered. Can both be (legally) present at the same time? 2) PROG and PRGS atoms - Same question as with PBLS and PBGS (may both be (legally) present at the same time) 3) When an application publishes an edition, how the heck is another application supposed to know where to find that edition? (only thing I can come up with is poping up a SFGetFile dialog and having the user locate the edition(s) that the subscriber should subscribe to...) [Maybe, as editions are basicly a "packaged scrap", a seperate, dedicated folder would be a desirable default location... 4) May an edition have multiple atoms of type $0000 (Text Scrap) that are related to each other only by the fact that they all came from the same original document? (ex: I want to put the first and last sentences of this message into two seperate atoms, both of these atoms appearing in the same edition) Right now I am very seriously considering making CoPilot II support Publish & Subscribe, not sure how fully yet (might only subscribe at first) -Harold (H.HISLOP [CryptKeeper], CAT36, TOP3, MSG:238/M530) <<<<< Harold, """"" As for #3...well, you do use SFGetFile2 to find out what edition to use :) (At least QCCalc does) for the others...I'll let Mike answer :) (T.BUCHHEIM [Timotheus], CAT36, TOP3, MSG:239/M530) >>>>> I was figuring that the subscribing app would have to use a """"" GetFile (of whatever variety) but..... the thought that a message might be posted by the publishing app which subscribers could retreive for automagic subscribing also crossed my mind. (I'd think SFMultiGet2 or SFPMultiGet2 would be preferable over SFGetFile2... as a subscriber could possible have reason to subscribe to several editions) -Harold (H.HISLOP [CryptKeeper], CAT36, TOP3, MSG:240/M530) <<<<< >> PBLS and PBGS - Can both be present at the same time? """"" Yes. It's less confusing if they contain the same information, of course. :) >> How [does] another application ... know where to find that edition? The user must subscribe to the edition. It goes a particular place, just like a paste. You also mentioned an "automated" subscribe, but that makes no more sense than an "automated" paste, and for the same reasons. Not all documents that _can_ subscribe to an edition will need to, and even if they needed to, there is still the issue of where to put the information in the document. >> May an edition have multiple atoms of type $0000. No. If there are separate pieces of information, each separate piece goes in a separate edition file. Mike Westerfield (BYTEWORKS, CAT36, TOP3, MSG:242/M530) C++??? This may surprise all of you, but the issue of a C++ for the """""" Apple IIGS is far from dead. If you've been watching what I'm doing lately, you've seen something that I hope will become a trend: Cross platform development and using the same basic technology in several applications. You've seen that already, and benifited from two Apple IIGS programs that would have never been developed otherwise. Roger Wagner contracted with us to do HyperLogo Mac, and we spun off HyperLogo GS and 3D Logo GS in the process. I'm currently working on HyperLogo PC, and expect to spin off 3D Logo on both the PC and Mac along the way. I'm looking seriously at ways to get the ORCA languages to other platforms. There seem to be some market niches not filled by the current products, and, frankly, a failure for a Semantec or Microsoft would be a roaring success for me. (Microsoft was selling as many BASIC compilers on the Mac in 3 months as I've ever sold of ORCA/C, but they cancelled the product for lack of sales!) If I'm successful, I'll eventually do a C++, and probably port it back to the GS. Another possibility I'm seriously considering is a port of the GNU front end. It would be slow, it would not be ANSI compliant, and there would be some marketting issues (the C++ would have to be offered free, and I do have to figure out how to make money on it), but it may still happen. If any of you have comments on any of this, be sure and let me know. Mike Westerfield (BYTEWORKS, CAT36, TOP3, MSG:249/M530) USED BYTE WORKS SOFTWARE I'm always happy to transfer ownership when """""""""""""""""""""""" you buy or sell one of our programs, so long as the entire program is sold, as in this case. Here's what I need: Your name and address The name and address of the person you bought from What you bought We'll send confirming letters to both parties. Upgrades are available from the 1.x ORCA products to the 2.x level. They are $50 for ORCA/M and $60 for ORCA/C and ORCA/Pascal. The major difference between the 1.x and 2.x products is support for GS/OS, with its longer path names and various FSTs. Pascal 2.0 also added objects. For a complete list of Byte Works products, including available upgrades, send your name and address to me by e-mail, and remind me about why you are writing. Mike Westerfield (BYTEWORKS, CAT36, TOP3, MSG:251/M530) PRIVATE ORCA LIBRARIES This note explains the private ORCA libraries-- """""""""""""""""""""" what they are, who can get access to them, and how you get access to them. The GEnie staff has viven me several libraries that I use for intermediate releases of ORCA tools. From this, I get faster feedback about potential problems as I develop updated versions of the ORCA tools, and those people that need it get access to bug fixes before they are available any other way. The libraries generally contain beta software that contains fixes to bugs in the most recent commercial release of the software. In the case of the most recently released commercial updates, I uploaded the updates, too, since they were almost entirely bug fixes. The libraries are _not_ a replacement for purchased updates. If I stop making money from improvements to the ORCA languages, I'll have to stop making improvements. The libraries _are_ delta updates. They are based on a specific release version of the ORCA software, and may not work with earlier versions. With that in mind, it's easy to see what the qualifications for access are. You can get access to the private ORCA libraries if you are a registered owner of the version of software the updates are based on. You must own ORCA/Pascal 2.0.1 or better, ORCA/C 2.0.1 or better, or ORCA/M 2.0.3 or better to get access to the libraries for one of these languages. You can check your version number by looking in the Login file in the Shell folder on your Program disk for a given language. THIS MAY DIFFER FROM THE VERSION PRINTED BY THE COMPILER OR SHELL. You must check this version in the Login file to see which release version you actually have. If you qualify, and want access to the private ORCA libraries, send the following information by e-mail: Your name Your mailing address (US mail, not e-mail) Which of the above programs you own, and the version A note telling me why you are writing Without _all_ of the above information, I will just refer you back to these instructions and ask you to try again. Thanks, Mike Westerfield (BYTEWORKS, CAT36, TOP3, MSG:255/M530) GS/OS QUIT IN ORCA/C I'm writing a desktop program with ORCA/C and I """""""""""""""""""" want to program to issue a GS/OS quit call so it'll launch another application. What's the proper way to do this? I shut down all my tools, but if I issue the quit call then, ORCA/C doesn't get to do its shutdown stuff. I seem to remember there being a way to force ORCA/C to do the shutdown and quit call for me, but I don't remember where I saw it or maybe I'm just loopy remembering stuff that never happened. Any pointers? (WANKERL [Joe], CAT36, TOP11, MSG:337/M530) <<<<< There's a function you can call to tell ORCA/C to shut all the """"" stuff down... hmm... Instead of doing a QuitGS call, why not just call ORCA's function: extern pascal void SystemQuitPath(GSString255Ptr); This tells ORCA/C what application to launch upon quitting your program. Then go through the normal quit procedure. Use extern pascal void SystemQuitFlags(unsigned); to set the flags value passed to QuitGS. Eric Shepherd (Sheppy) [Team PPCPro] (POWERPC.PRO [Sheppy], CAT36, TOP11, MSG:338/M530) [EOA] [LIB]////////////////////////////// LIBRARY BIT BONANZA / ///////////////////////////////// HOT Files You Can Download """""""""""""""""""""""""" By Tim Buchheim [T.BUCHHEIM] >>> Data Encryption <<< """"""""""""""""""""""""" File #4286 RSA.BXY (ALL) Uploaded on 8/31/94 by D.BROWN109 About 90k (d/l time approx. 9 minutes @ 2400 baud Ymodem) This is a collection of questions and answers on today's cryptography, assembled by RSA Laboratories, Inc. It explains RSA, a popular public-key cryptosystem, in some detail, and also addresses other systems and the legal issues surrounding them. The FAQs are contained in three text files. File #4285 CRYPT.BXY (ALL) Uploaded on 8/31/94 by D.BROWN109 About 75k (d/l time approx. 7 minutes 30 secons @ 2400 baud Ymodem) This ShrinkIt archive contains the Frequently-Asked Questions (with answers) for the sci.crypt newsgroup. Lots of general theory is included. Private and public key cryptosystems are explained, merits of particular systems are discussed, and lots of terminology is explained. This version is current as of 5 July 1994, and it is the latest on rtfm.mit.edu. The FAQ is in 10 parts, each a separate text file. >>> Source Code for Music Programs! <<< """"""""""""""""""""""""""""""""""""""""" File #4279 NTGSSRC10.BXY (GS) Uploaded on 8/29/94 by T.MORALES About 405k (d/l time approx. 40 minutes 30 seconds @ 2400 baud Ymodem) This is the source code for Noise Tracker GS version 1.0. This source code was made public domain by it's author, Olivier Goguel, and you are encouraged to try and learn from it. All source code is in Merlin-16+ format, but you can convert it without much effort to other popular assemblers. File #4274 ST.SRC.63.BXY (GS) Uploaded on 8/26/94 by A2.LUNATIC About 360k (d/l time approx. 36 minutes @ 2400 baud Ymodem) Released by Tim Meekins to the public, here is the complete source code to soniqTracker 0.63. This is a really nifty IIgs desktop MOD playing program with lots of effects. Includes a short read.me file. >>> Miscellaneous <<< """"""""""""""""""""""" File #4297 ASF108LESS4.BXY (ALL) Uploaded on 9/5/94 by A2PRO.HELP About 22k (d/l time approx. 2 minutes 12 seconds @ 2400 baud Ymodem) Here it is (finally); the final episode in the A2 University course "An Introduction to Applesoft". Be sure to check out the details on A2Pro's newest upload contest; they're inside. Brought to you by professor J. Nathaniel Sloan. :) File #4295 LORES.PAINT.BXY (ALL) Uploaded on 9/4/94 by B.WELLS5 About 12k (d/l time approx. 1 minute 12 seconds @ 2400 baud Ymodem) This is an unfinished Lo-Res paint program I started working on back in '90. It has Load & Save using Text Commands (File #4294). It has a sharp assembly fill routine, as well as a color ImageWriter printer driver. As this version isn't near my user interface standards, please do not distribute it beyond this library. However, you may use the assembly routines in your own programs. Merlin source is included so you can experiment with it :) Have fun! :) File #4294 TEXTCMDS1.1.BXY (ALL) Uploaded on 9/4/94 by B.WELLS5 About 23k (d/l time approx. 2 minutes 18 seconds @ 2400 baud Ymodem TEXTCMDS will add commands to AppleSoft BASIC for Loading, Saving & Printing Text screens from ProDOS. Lo-Res pictures can also be loaded and saved! An editor for designing your screens is included, along with fully commented source code in Merlin format. These routines are provided as freeware, but please credit the author in your program if you use them. This version contains some minor improvements over v1.0. File #4289 PUBLISH.RTC.TXT (ALL) Uploaded on 9/1/94 by A2PRO.GELAMP About 15k (d/l time approx. 1 minute 30 seconds @ 2400 baud Ymodem) This is the transcript from the A2Pro RTC "Publish and Subscribe", held on August 29, 1994. The guest was Mike Westerfield from The Byte Works, Inc. This is a text file that may be downloaded or isted. [EOA] [RTC]////////////////////////////// RTC WATCH / ///////////////////////////////// Excerpts from Evening Escapades """"""""""""""""""""""""""""""" By Tim Buchheim [T.BUCHHEIM] >>> SnOOping Menus <<< """""""""""""""""""""""" How does one get at the title string of a menu that the Menu Manager uses to draw the menu with? Dave: GetMenuTitle That needs a menu ID Dave: why don't you know the ID? :) Hmmm. Use GetMenuFlag, and examine the ref bits, then use GetMenuTitle, and deref handle/load resource, or just look at the pointer. Or, patch DrawString and only use it when MenuSelect is called. Because he's trying to alter the title of a menu ITEM in any application when the option key is held down while selecting the File Menu. Why? That's bad HIG practice, right? Replace "Print..." with "Fax..." and "Print Setup..." with "Fax Setup..." Oh I see. Not good. Find another way. I wouldn't do that. He has the handle of the menu bar which he obtained by patching menu select. He can get the ID of the menu out of the menu bar record. But there's no documented method to figure out which menu items are attached to which menus... Don't do this--it's bad, and not 100% always going to be a sure thing that Print prints, and Print Setup does whatever print setup is supposed to do. Dave: that's a Bad Idea. What if some program doesn't call the items by the normal names. (foreign language version, or something) Or the items with those names are NOT meant to do whatever? It's bad, yes. He's patching the Print Manager, also... It will know. It won't prevent anything from happening if the Print Manager isn't called. Mucking with menus and their titles is just too much trouble for what's worth. Dave: this is not a good thing. what if the App itself wants to do something special with the option key and the print items? :) I agree with Tim. also, holding down option, shift, and command, or some such combo, is how you get the version number of an Apple printer driver (imagewriter and stylewriter both bring up version # alerts when you hold down modifiers and open the page setup or print job dialogs) I'm not sure if he was going to replace them just when the option key was down... it may have a switcher to switch from Print mode to Fax mode in an NDA or a CDA or something... The menu structure, beyond what apple defines, is easy to figure out--I've done it, but messing with it isn't a good idea. I had to do it so I can tell when a menu is cached or not, and I'm even taking chances by doing this. Telling whether or not a menu is cached is documented. I found it last night in TBR3 when Paul and I were digging for stuff... No, whether or not it is currently cached. yes. The cache bit only tells you that it could be cached. Not that it is, or that the cache is dirty, and needs to be redrawn. I think Tony is correct My GUI program needed this info real badly, and took me a while to figure it out, not without a lot of confusion. ah. yep. just reread it. Those people who denounce patching weren't too happy with my idea when I needed this info 8 or so months ago. Hmmm.... his thing is going to be an init... it'll be in the system anyway... This fax software, right? Hmmm. Why doesn't he just make a CDev that lets you toggle between normal printing and faxing through the Print Mgr? he should just patch the menu creation calls and snag the IDs of the menu items that contain what he needs access to as they're created; then he can use legal tool calls to modify them. >>> 65816 Assembly Language Weirdness <<< """"""""""""""""""""""""""""""""""""""""""" Gee, I just noticed that your cannot do a "pea ^label" in Orca/M. I, of source, looked it up in the 65816 spec book, and, as usual Mike is right and that instruction is illegal. But Merlin takes it. Of course, I think it should be leagal, since its obvious what you want to do, and to code it is obvious, too. You want to push the word-sized bank that the label resides in. I used it all the time in Merlin when I had, say, [A,X] filled with a handle and wanted to call _PtrToHand (just and example). Then I would pea ^dataPtr pea ^dataPtr phx pha pushlong size _blockmove. (pea does not trash A or X). ph2 #^label Does that macro trash A or X? I dunno It does. (At least mine does) Hmmm... seems like that ought to be possible... I've been switching over to Orca. That's why these little things are on my mind. the compiler knows where the label is... why shouldn't it just use it... Of course, Merlin also lets you type "pea #5" vs "pea 5". The first is technically _wrong_, but merlin does the same thing for both. if you're following any kind of standard, it actually ought to be #5. The # distinguishes between a contant and an address. PEA doesn't take an address, so it just assumes it's a constant even though it looks like an address. Yep. But the specs say pea 5. Also, for pea label it says "psh the 16-bit address of label" thus Orca does not allow pea ^label, even though the machine code for a latter would work just fine. I usually avoid using A, X, and Y for anything other than temporary holding unless I have a need for speed in a routine. Mainly for that reason. It's much easier to set up 'variables' in your data segment and make extensive use of them... True, but a NewHandle followed by a BlockMove, when you really don't need the pointer again, its nice not to have to save it somewhere. yeah. [EOA] [CAM]////////////////////////////// CAMPUS GREEN / ///////////////////////////////// Latest on Current Courses """"""""""""""""""""""""" By Nate Trost [A2PRO.GELAMP] The A2U 'Introduction to Applesoft BASIC' course has finished! Here are the lessons available for download in the A2Pro library: #4239: Course Introduction #4242: Lesson 1 #4257: Lesson 2 #4266: Lesson 3 [*][*][*] [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]