Copy Link
Add to Bookmark
Report
GEnieLamp A2Pro - Vol.4, Issue 20
|||||| |||||| || || |||||| ||||||
|| || ||| || || ||
|| ||| |||| |||||| || |||| 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;
<<<handle the "no match" condition>>>
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 <L>isted.
[EOA]
[RTC]//////////////////////////////
RTC WATCH /
/////////////////////////////////
Excerpts from Evening Escapades
"""""""""""""""""""""""""""""""
By Tim Buchheim
[T.BUCHHEIM]
>>> SnOOping Menus <<<
""""""""""""""""""""""""
<JUST.DAVE> How does one get at the title string of a menu that the
Menu Manager uses to draw the menu with?
<T.BUCHHEIM> Dave: GetMenuTitle
<JUST.DAVE> That needs a menu ID
<T.BUCHHEIM> Dave: why don't you know the ID? :)
<T.MORALES> 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.
<JUST.DAVE> 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.
<T.MORALES> Why?
That's bad HIG practice, right?
<JUST.DAVE> Replace "Print..." with "Fax..." and "Print Setup..." with
"Fax Setup..."
<T.MORALES> Oh I see. Not good. Find another way.
<T.BUCHHEIM> I wouldn't do that.
<JUST.DAVE> 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...
<T.MORALES> 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.
<T.BUCHHEIM> 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?
<T.MORALES> It's bad, yes.
<JUST.DAVE> He's patching the Print Manager, also...
It will know. It won't prevent anything from happening if
the Print Manager isn't called.
<T.MORALES> Mucking with menus and their titles is just too much
trouble for what's worth.
<T.BUCHHEIM> 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? :)
<T.MORALES> I agree with Tim.
<T.BUCHHEIM> 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)
<JUST.DAVE> 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...
<T.MORALES> 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.
<JUST.DAVE> 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...
<T.MORALES> No, whether or not it is currently cached.
<JUST.DAVE> yes.
<T.MORALES> 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.
<T.BUCHHEIM> I think Tony is correct
<T.MORALES> My GUI program needed this info real badly, and took me a
while to figure it out, not without a lot of confusion.
<JUST.DAVE> ah. yep. just reread it.
<T.MORALES> Those people who denounce patching weren't too happy
with my idea when I needed this info 8 or so months ago.
<JUST.DAVE> Hmmm.... his thing is going to be an init... it'll be in
the system anyway...
<T.MORALES> 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?
<JUST.DAVE> 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 <<<
"""""""""""""""""""""""""""""""""""""""""""
<W.TUDOR> 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).
<JUST.DAVE> ph2 #^label
<W.TUDOR> Does that macro trash A or X?
<JUST.DAVE> I dunno
<W.TUDOR> It does. (At least mine does)
<JUST.DAVE> Hmmm... seems like that ought to be possible...
<W.TUDOR> I've been switching over to Orca. That's why these little
things are on my mind.
<JUST.DAVE> the compiler knows where the label is... why shouldn't it
just use it...
<W.TUDOR> 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.
<JUST.DAVE> 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.
<W.TUDOR> 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.
<JUST.DAVE> 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...
<W.TUDOR> 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.
<JUST.DAVE> 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]