

     |||||| |||||| ||  || |||||| ||||||
     ||     ||     ||| ||   ||   ||
     || ||| ||||   ||||||   ||   ||||               Your
     ||  || ||     || |||   ||   ||
     |||||| |||||| ||  || |||||| ||||||             GEnieLamp Computing

     ||    |||||| ||    || ||||||                   RoundTable
     ||    ||  || |||  ||| ||  ||
     ||    |||||| |||||||| ||||||                   RESOURCE!
     ||    ||  || || || || ||
     ||||| ||  || ||    || ||


                     ~ WELCOME TO GENIELAMP A2Pro! ~
                       """""""""""""""""""""""""""
             ~ AWESOME OPTIMIZING ~ SPOTLIGHT ON: HangTime ~
          ~ MANY BOOKS MADE AVAILABLE AGAIN BY THE BYTE WORKS ~
                ~ ORCA/C HELP ~ TAKING THE P OUT OF PIF ~
                  ~ HOT NEWS, HOT FILES, HOT MESSAGES ~

 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////
  GEnieLamp A2Pro      ~ A T/TalkNET Publication ~       Vol.5, Issue 30
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 Publisher.................................................John F. Peters
  Editor....................................................Tim Buchheim
 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////
          ~ GEnieLamp IBM ~ GEnieLamp Atari ~ GEnieLamp PowerPC ~
         ~ GEnieLamp A2Pro ~ GEnieLamp Macintosh ~ GEnieLamp TX2 ~
          ~ GEnieLamp Windows ~ GEnieLamp A2 ~ LiveWire (ASCII) ~ 
             ~ Member Of The Digital Publishing Association ~
  GE Mail: GENIELAMP                       Internet: genielamp@genie.com
 ////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

             >>> WHAT'S HAPPENING IN THE A2Pro ROUNDTABLE? <<<
             """""""""""""""""""""""""""""""""""""""""""""""""
                           ~ September 1, 1995 ~

 FROM MY DESKTOP ......... [FRM]        HEY MISTER POSTMAN ...... [HEY]
  Notes From The Editor.                 Is That A Letter For Me?

 A2PRO ROUNDTABLE STAFF .. [DIR]        DEVELOPERS CORNER ....... [DEV]
  Directory of A2Pro Staff.              News From Online Developers.

 LIBRARY BIT BONANZA ..... [LIB]        RTC WATCH ............... [RTC]
  HOT Files You Can Download.            Real Time Information.
  
                     LOG OFF ................. [PUB]
                      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)
        _____________|   _____|__  _|___    |____ |_____________
       |Name of sender   CATegory  TOPic    Msg.   Page number|

    In this  example, to  respond to  Smith's  message, log  on to  page
530 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, 2400 or 9600 baud.

2.  Call (with modem) 1-800-638-8369.

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
"""""""""""""""""""""
by Tim Buchheim
 [A2PRO.GELAMP]


    o TOP OF THE PAGE



                          >>>  TOP OF THE PAGE  <<<
                          """""""""""""""""""""""""
                        ~ A Letter From the Editor ~


SCHOOL   It is now September.  Summer is over, school is about to begin.
""""""   I'll be a senior in high school this year, which will be nice, but
I doubt it will be that much different from all those other years.  As
usual, they managed to completely mess up my schedule.  It took my sister
quite a while to sort it out.  (I was at Lake Powell on a houseboat, so she
registered for me.)  The program they use to assign classes is designed to
mess up as many schedules as possible.  I'm sure of it.  I was only able
to get five of the six classes I wanted.  Why?  Well, AP Computer Science
and AP Latin IV (yes, I speak Latin.. why are you looking at me that way?)
were both scheduled for second period.  ONLY second period.  :: sigh ::
I have no fifth period, and will take AP Computer Science as "Independant
study" which means I'll sit in the back of a classroom full of BASIC
students and write my Pascal programs.  Not too bad, actually..  I should
be able to finish a semester's worth of work in two weeks or so.  Then
maybe I will be able to use class time for REAL programming. :)

Or, maybe I'll just go home (since I won't officially have a 5th period:)
or go places with other friends who don't have a fifth period.  (This year
the computer decided to schedule almost no classes that period.  Well,
there is a fifth period calculus class.  But as far as I can tell, anyone
who is in my third period calculus class has no fifth period.:)

In any case, school seems to be a waste of time.  After all, I only need
twenty more credits to graduate.  That's two semesters of English, a
semester of government, and a semester of economics.  But, of course,
they won't let me just take those four classes and be done with it.  I
have to take five classes in each of the next two semesters.  Why?
Well, to keep me out of trouble, of course.  (but then they make it
impossible for me to take six classes.  Why is that?)

Oh well.  Maybe when I'm in college things will make more sense.
I'll be waiting for reports from Sloanie (who is now a freshman at
Harvey Mudd College in Claremont, CA, which, by some odd coincidence,
is the same place I want to go. :)

This talk about school is depressing me.  I'd better stop before it
gets to you, too :)  So enjoy the issue!!

                                              -- Timothy Carl Buchheim
                                                 Editor, GEnieLamp A2Pro



                              [*][*][*]


    Do you have something  to say about  GEnieLamp A2Pro?  Please
    post  any questions or  comments you  may have in Category 1,
    Topic 15 in A2Pro's BB (m530;1).  Or, feel free to talk to me
    (A2PRO.GELAMP) anytime you see  me in a Real Time Conference.

    Readers out there on the Internet:   feel free to email me at
    a2pro.gelamp@genie.com     When writing, please tell me where
    you got your copy of  GEnieLamp,  if it wasn't on GEnie.  I'm
    always interested to see how many places GEnieLamp ends up :)

    By the way,  the  current  issue  and  most  back issues  are
    available online in  many  places.  GEnie users  should check
    Library #2  in the  DigiPub libraries  (DIGIPUB, page 1395;3)
    Those of  you not on  GEnie  should  use  gopher  software to
    connect to gopher.genie.com for issues; all recent issues and
    most older ones are there.


                              [*][*][*]


      /////////////////////////////////////////// GEnie_QWIK_QUOTE ////
     / Actually, I'm stunned I thought of it. It just popped into my /
    /  head when I read the previous posts.                         /
   ////////////////////////////////////////////////  RICHARD.B  ////



[EOA]
[DIR]//////////////////////////////
          A2PRO ROUNDTABLE STAFF /
/////////////////////////////////
By Tim Buchheim
 [A2PRO.GELAMP]


    o   A2Pro STAFF LIST

         o   SPOTLIGHT ON: HangTime



                        >>> A2Pro STAFF LIST <<<
                        """"""""""""""""""""""""

                          ______________________________________________

                           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)
 /__/    |__|________//  / \/_/            Tim Buchheim     (A2PRO.GELAMP)



ASSISTANTS:   Although they don't show up on A2Pro's banner when you come
"""""""""""   in, they do just as much around here as everyone else. (maybe
more :)   They are (in no particular order) Brian Wells (B.WELLS5), Russell
Nielson (R.NIELSON1), and Nate Trost (N.TROST).  Working on "Special
Projects" are Tim "Joat" Tobin (A2.TIM, on loan from A2) and Richard
Bennett (RICHARD.B).




                     >>> SPOTLIGHT ON: HangTime <<<
                     """"""""""""""""""""""""""""""

DEJA VU?   Starting with this issue, GEnieLamp A2Pro is going to take a
""""""""   closer look at the people who bring you A2Pro.  I was recently
looking at some old issues of GEnieLamp and I noticed that back when Jim
Couch was editor (even before Nate Trost was editor!) he ran a series of
short biographies about the A2Pro staff members.  Well, only a few of those
staff members are still with A2Pro and many others have joined us. 
Therefore it's about time for GEnieLamp to do this again.

We begin this month with HangTime, head sysop of A2Pro.  I'll let him
tell you about himself in his own words:


<HangTime>   My first experiences with a computer were back when I was a
''''''''''   "wee-one", in the days before the Apple II, using an IMSAI
8080.  Back then it seemed like a pretty incredible machine (and actually,
it was)!  I started learning assembly (which sure beat the snot out of
entering code using the binary switches on the front panel), but then
discovered that scourge of programming languages, BASIC.  Cranking out
programs in BASIC was so much quicker that, sadly, I lost interest in asm.

During this time I also had the opportunity to play with a couple of VAX
machines, and learn Pascal.  Too late, the viral infection of BASIC had
grown too strong and I found Pascal was just too darned structured for me
to really keep on with it.  Of course by the time I was learning Pascal I
had an Apple ][+, so this too stole my interest from the VAX.

I found the ][+ to be a very powerful machine, and used it for all kinds of
things, from fun little animations using shape tables to a full featured
Data Base Manager used to keep track of a mailing list for the band I was
playing in at the time (I even used it to put together our ad posters and
mailings).  I continued coding in Applesoft on that machine for quite a few
years, and infact skipped the //e generation completely, leaving me
pretty clueless about ProDOS when I got my GS shortly after its
introduction.

Within a very short time of getting the GS I bought a modem and joined
GEnie.  Having had lots of experience with sound I immediately began U/Ling
digital samples as well as D/Ling others', and frequently editing and
then re-U/Ling these (giving appropriate credit, of course). All this
U/Ling didn't go unnoticed and when then Head Librarian Dean Esmay
approached me for a position on the Library staff of A2, I naturally 
jumped at the chance.  After D/Ling the entire sound library, editing and
updating where appropriate, I moved on to other duties including working in
the bulletin board, and hosting RTCs.

This all kept me out of trouble for a couple of years, but of course I
needed to move on to bigger and better challenges, so when I heard that
Resource Central was about to launch a new publication for and about
HCGS, I applied for the job (I had purchased HCGS the day it was
released, and had my first stack [hack that it was] completed and U/Led
within 12 hours of cracking the manuals).  Script-Central went on to become
the Premiere publication for HyperCard, and was getting rave reviews from
everyone that saw it, it even received a 5 star rating in A+ magazine
(SCript was the only one of Resource Centrals publications to get a 5
star rating too!).  If I may put in one "plug", if you haven't seen
Script-Central, there's a demo available in the A2 library that'll give you
a _taste_ of what Script-Central is.

Sadly, as most of you know, Resource Central was forced to cancel all of
its publications due to declining readership, however not wanting to see
all my work disappear, I requested that all the rights revert back to me
and Tom Weishaar was kind enough to oblige.  After a couple of weeks of
hashing out details with Joe Kohn, Script-Central back issues are once
again available through Shareware Solutions II.  And while not a
Shareware product, the entire back issue catalog is available for $4.50 per
issue (and each issue is TWO disks [and once the compression technology was
avialable, these two disks comprised around two and a half megabytes of
stuph!]) if you purchase the entire catalog ... not bad, eh?  Hopefully
there will be enough interest to warrant at least one NEW issue of SCript
... we'll see B-)>

Meanwhile, these days, I'm the manager of the A2Pro RT.  So why do I
deserve to be running this RT?  <Shrug> I dunno, I love my Apple IIs. 
'Nuph said?




[EOA]
[HEY]//////////////////////////////
              HEY MISTER POSTMAN /
/////////////////////////////////
Is That A Letter For Me?
""""""""""""""""""""""""
By Tim Buchheim
 [A2PRO.GELAMP]


    o   BULLETIN BOARD HOT SPOTS

         o   WHAT'S NEW
           
              o   PROGRAMMER'S TIPS

                   o   MESSAGE SPOTLIGHT                             



                      >>> BULLETIN BOARD HOT SPOTS <<<
                      """"""""""""""""""""""""""""""""


 [*]  CAT 1,  TOP 21, MSG {153}....Don't know where to post?  Post here!
 [*]  CAT 2,  TOP 5,  MSG {51}.....Using the Merlin 8 assembler
 [*]  CAT 2,  TOP 6,  MSG {96}.....Assembly Language
 [*]  CAT 3,  TOP 19, MSG {106}....General Assembly Questions
 [*]  CAT 15, TOP 14, MSG {188}....Window Manager
 [*]  CAT 20, TOP 15, MSG {11}.....Writing Permanent Inits          (PIFs)



                            >>> WHAT'S NEW <<<
                            """"""""""""""""""


GSLIB UPDATE   Just to update folks on the status of GSLib:
""""""""""""
Those of you who were at KFest will recall that my PowerBook Duo broke down
the day of my GSLib presentation, preventing me from completing the sample
code. I promised I'd have it ready as soon as the Duo was fixed.

Tony Diaz has been working on it since then, but he finally gave up in
disgust a few days ago and shipped it back to Apple. Them's strange
hardware... Anyway, I haven't been able to work on any GSLib stuff since
mid-KFest, and won't be able to until my Duo gets back from Apple.

Sorry for the inconvenience.

-G.T. Barnabas
                    (BARNABAS, CAT2, TOP5, MSG:58/M530)






                         >>> PROGRAMMERS' TIPS <<<
                         """""""""""""""""""""""""


AWESOME OPTIMIZING   Stupid / Slick Assembly Tricks $65 (%01101001 for you
""""""""""""""""""   bitheads ;)

It is assumed that these sample fragments are entered with the processor in
native mode, with 16 bit registers. It is also assumed, except where noted,
that the general operating enviroment is already set up (stack location,
direct page, data bank, etc)

The examples here all use Merlin-16+ syntax, though similar syntax should
work with other assemblers.

Problem:
How to get a known-at-asssembly-time 8 bit value onto the stack while in
native mode in the most efficient manner. (the meaning of efficient, in
this context, is left to the reader to determine, as it doesn't always mean
the same thing in all cases)

For sake of example, the value $A5 is used here, but the methods shown
will of course work for any eight bit value.

Solutions:
The clasic way of doing this is presented below:

          sep   #$20      ;switch to an 8 bit acc      3 cycles
          lda   #$A5      ;load acc with value         2 cycles
          pha             ;stack it                    3 cycles
          rep   #$20      ;switch back to 16 bit acc   3 cycles

This produces seven bytes of object, and consumes eleven processor cycles.
Not too shabby, and it is very readable.

An alternate method would be:

          pea   $A500     ;desired value in hi byte    5 cycles
          tsc             ;stack ptr -> acc            2 cycles
          inc A           ;bump pointer by 1           2 cycles
          tcs             ;set fixed stack pointer     2 cycles

While this too requires eleven cycles, it only produces six bytes of
object... hey, don't laugh, those 1 byte savings here and there add up in a
hurry (especially if this is coded into an often used macro!)

If the object size is more critical than the cycle count then the following
method is even better... it only needs five bytes (but requires thirteen
CPU cycles to execute... ewww...)

          pea   #$A500    ;desired value in hi byte    5 cycles
          php             ;push additional 8 bits      3 cycles
          pla             ;pop off word of trash       5 cycles

One final example to make you go "Hmmmmmmmmm"...

If you need to push an 8 bit value onto the stack =and= you also need to
set your data bank to the same as your code bank, and you need it to work
right regardless of register sizes, then this might fit your needs. It only
requires 9 cycles to execute, and only takes up four bytes of object! Now
THAT's tight coding! (tighter than the reason ducks float ;)

Label     pea ^Label      ;push the code bank          5 cycles  
          ds  -1          ;back up object pointer      assy pseudo op
          db  $A5         ;8 bit value desired         assy pseudo op
          plb             ;set the data bank           4 cycles

(think carefully and use at your own risk... ;)

-Harold
                    (HAROLD.H, CAT3, TOP19, MSG:106/M530)



>>>>>   > Stupid / Slick Assembly Tricks $65 (%01101001 for you bitheads ;)
"""""
Yikes! My $10 Radio Shack dec/hex/bin calculator has finally given up the
ghost...

Trying to push/pull one byte on the stack has been awkward with the 65816.
Maybe the mvn/mvp opcodes could have been deleted for those. It is my
understanding that tight code can outdo the built-in instructions, which
seems strange. Was there public discussion about the 65816 instruction set?

- Mr. Bithead -

Who's trying to program in C.

                    (J.GRAY38, CAT3, TOP19, MSG:107/M530)



>>>>>   I'd rather have MVP/MVN than specific one-byte stack instructions.
"""""   Of course, I'd also rather have MVP/MVN not waste so darn many
cycles on "internal operations", but as I understand it they were a last
minute addition as things were being frozen anyway, so "it" happens...

Todd Whitesel
                    (A2PRO.TODDPW, CAT3, TOP19, MSG:108/M530)


>>>>>   Harold,
"""""
        > PEA label|-16.or.$A500
        > PLB

Hey, neat.  Of course, assuming full native, you could also do:

          PEA $A500
          PLP

(This approach is still 4 bytes/9 cycles, but it saves object space by not
needing to be relocated.  Still, your method trades the extra relocation
entry for setting the data bank register, so in some situations it might be
nicer).

Hmm.  Then again, my version gives you a free SEP/REP pair, come to think of
it, by storing the low byte of the PEA into the p-register for you. This
might actually be nicer in some situations).

...Sloanie
                    (JNSLOAN, CAT3, TOP19, MSG:110/M530)



>>>>>   Which reminds me...  it's time for another one of my "I have no
"""""   reference materials and basically don't know anything because I
learned IIgs programming by reading other people's source code" -type of
questions...   :)

What is the layout of the P-register?  I know which bits are there, but I
don't know what order they come in...

And, for that matter, what exactly do SEP and REP -do-?

 -Bret        >>>  so sez CoPilot 2.55

                    (B.VICTOR1, CAT3, TOP19, MSG:111/M530)


<<<<<   Sloanie,
"""""
        >> PEA label|-16.or.$A500
        >> PLB

You might want to look at that code a little closer... and think about how
code is loaded on the IIgs, under GS/OS... There's a very good reason I
included that little "use at your own risk" comment ;-) [when you spot it
don't feel too bad, I didn't realise it myself till I tried the code...
when you spot it I'll let you bang your head in the wall right next to the
mark my head left on it :)]

If nobody spots and notes it here, then I'll explain it :)

        >>  PEA $A500
        >>  PLP

This is SLICK! :) Infact I may even wind up using it myself... beleive it
or not I never really though of PLP as being a combined SEP/REP, SEI/CLI,
SED/CLD, SEC/CLC, SEV/CLV (hey, there's one of the missing opcodes :-) etc.
command, even though I'm very particular about things when dealing with
'rupts (I always use a PHP before killing 'rupts, and a PLP when
finished... I refuse to use CLI under GS/OS... if somebody ahead of me
killed 'rupts, they probably had a very good reason for doing so, and I'd
rather be safe than sorry)

-Harold
                    (HAROLD.H, CAT3, TOP19, MSG:112/M530)




>>>>>   That's pretty cool Sloanie. Personally I've used:
"""""
        > PEA $A500
        > PHB
        > PLA

...but these days I'm more likely to go traditional:

          SEP $20
          LDA #$A5
          PHA
          REP $20

I rarely comment code (can you believe that Harold?! Wow!) and it saves me
have THINK too hard when I go back and read it. 2.8MHz may be slow, but
rarely do you need to save so few cycles. And remember, we usually have up to
4MB of RAM available, AND very little time to do fancy coding, when people
are hounding you to get products working and out the door.

Regards,
 Richard
                    (RICHARD.B, CAT3, TOP19, MSG:113/M530)


>>>>>   Harold,
"""""
I'm afraid I can't bang my head against the wall quite yet, as whatever
problem with the PEA label|-16.eor.$a500 is there, it's not one I can see. 
:)
                    (JNSLOAN, CAT3, TOP19, MSG:114/M530)



<<<<<   Bret,
"""""
You =NEED= IIgs docs if you're going to program this beast... trust me, I
tried like heck to avoid this, and couldn't.

>> What is the layout of the P-register? I know which bits are there, but I
>> don't know what order they come in...

       E - Emulation bit (1 = 65C02, 0 = 65C816)
NVMXDIZC
  ||______M is acc width (1 = 8 bit)
          X is X,Y reg width, see above

SEP - SEt P register bits
REP - ResEt P register bits

Both are commonly used for changing register sizes on the fly, although
they can be used for many other purposes when appropriate (such as
combining a SEC and SEI and setting some/all registers to 8 bit width all
with one 2 byte instruction (advanced slick programming tricks :)

-Harold
                    (RICHARD.B, CAT3, TOP19, MSG:113/M530)



<<<<<   Sloanie, et-al,
"""""
>> I'm afraid I can't bang my head against the wall quite yet, as whatever
>> problem with the PEA label|-16.eor.$a500 is there, it's not one I can
>> see. :)

No exclusivity here, please,  that should read "PEA label|-16.or.$a500" :)

That I was able to stump Paul P the other night in an RTC with this
problem, and that you didn't spot the problem makes me feel a little
better... apparently this really is an obscure thing, and not a case of my
brain being fueled by the gasious byproduct of fermented fava beans ;)

Lets look at this very carefully here. [I know that you don't need the
level of detail I go into here, but others might, and as this whole thing
got started by a beginers question, detailed explaination is called for]

PEA is considered to be a word operative, as regardless of register size
settings it always pushes a word (it's operand) onto the stack.

The expression "label|-16" produces one null byte and one byte of
meaningfull object (the bank byte). As the bank number of a label is being
worked with, it will need to be patched, by the system loader's relocator
(or rCode resource converter) to reflect the actual bank that the code gets
loaded into by GS/OS.

The expression "$A500" produces one byte of meaningfull object ($A5) and
one null byte. This is a constant, and thus should never be altered in any
manner by the system loader's relocator or the rCode resource converter.

By combining these two values together (using .OR. or adding them, the
results being the same), such that the resulting high byte is the constant
$A5 and the low byte is the bank byte refering to "label" one winds up with
a word that is a combination of static and dynamic values. 

By hand reducing the expression, one gets the following:
(assuming, for sake of example, that "label|-16" equates to $0077)

PEA label|-16.or.$a500  - original source
PEA #$0077.or.$A500     - partially reduced expression
PEA $A577               - fully reduced expression ready for assembly
      ^ ^______________ - Dynamic, changes with bank loaded into
      |________________ - Static, should never be changed by anything

One =could= tweak / hand polish the relevant cReloc or cSuper record
associated with such a code fragment so that only one byte of the operand
would be affected by the relocator, but lets face it, that kind of thing is
beyond probably 99% of all IIgs programmers (Mike W. being a notable
exception :). Arguably this could be considered a flaw in the typical
implimentation of IIgs linkers and assemblers, or in the specifications of
OMF itself, but lets face it, how many years has the GS been around, and
how often has anyone tried using PEA to handle both a static and a dynamic
byte at the same time?

Note however that PEA label|-16.or.$A500 would produce perfectly acceptable
absolute code... eg: if a ProDOS-8 application loaded this object and
=moved= it to the address it was originally assembled to run at, it would
function exactly as expected and designed.. The problems only shows up in
OMF packaged relocatable code that is relocated by one of the system code
relocators (I suspect that the relocator used by _InitialLoad / 2 and by
the rCode resource converter is one and the same, but I don't know this for
certain, Apple never saw fit to publicly document this)

Your example of pushing two bytes of constant data (using PEA) and then
popping the top byte into the status register (PLP) would of course not be
affected by this, as both bytes of the word being pushed are constants.

Oh, the mark my head left on the wall is right over ---------> here :-)

-Harold
                    (HAROLD.H, CAT3, TOP19, MSG:121/M530)


>>>>>   I wasn't aware that the OMF 2.0 format wasn't robust enough to
"""""   handle combo static/dynamic words.  If this is the case, then,
obviously, it ain't gonna fly.  :-)

Jay,

(re: futzing the interrupt flag)

Well, if it's your code, you should know how the interrupt is set anyway. If
you simply spush $A504 instead of $A500, the pull the processor, you end up
with interrupts still disabled.  :)

                    (JNSLOAN, CAT3, TOP19, MSG:123/M530)



>>>>>   >I wasn't aware that the OMF 2.0 format wasn't robust enough to
"""""   >handle combo static/dynamic words.  

OMF deals in bytes, not words; it should have no problem implementing this,
as long as the assembler is able to break up the pea operand.

>Well, if it's your code, you should know how the interrupt is set anyway.

Only if I'm an application, and even then I'm extremely reluctant to ever
cli. I always php, sei, plp.

 - Jay
                    (JAY.KRELL, CAT3, TOP19, MSG:125/M530)



<<<<<   Sloanie, Jay,
"""""
jns>> I wasn't aware that the OMF 2.0 format wasn't robust enough to handle
jns>> combo static/dynamic words.  If this is the case, then, obviously, it
jns>> ain't gonna fly.  :-)

jk>> OMF deals in bytes, not words; it should have no problem implementing
jk>> this, as long as the assembler is able to break up the pea operand.

Jay's comments got me to dig out, and re-read yet again the OMF format info
(in the GS/OS Ref, pgs 454, 455, the RELOC example in particular) While
this example deals with an LDA instruction, it is quite applicable to a PEA
as well.

It does indeed appear that the OMF format =is= robust enough to handle
mixed constant / dynamic data for a PEA instruction, as it does operate at
a byte (not word) level... oops, my error. (I was basing my comment about
OMF on the "note" associated with the RELOC description, which was the
wrong thing to do... read too much into it.)

Even more embaressing... Now I can't get Merlin-16+ to generate incorrect
OMF! When I try using an expression (^Label!Value) I get an error msg (as
I did the other night) but when using DS -1 (to back up the obj pointer
by one byte) the OMF generated has a correct RELOC record (patches 1 byte)
and when that's loaded by _InitialLoad the results in memory are correct.

I don't know what I did the other day to get it to generate improper OMF...
Apparently I've been hoisted on my own petard by typo(s)... AURGH!!!!! :(
(banging head on wall again, different place though...)

Could one of you code the example in ORCA/M and see if it produces a
correct RELOC / SUPER? (though Mike probably got it right... sigh)

-Harold
crawling back into the crypt... :/
                    (HAROLD.H, CAT3, TOP19, MSG:126/M530)


 
>>>>>   > Stupid / Slick Assembly Tricks $65 (%01101001 for you bitheads ;)
"""""
Let's see...         $65 = %01100101 : %01101001 = $69

 ...Chris
                    (K.FLYNN, CAT3, TOP19, MSG:132/M530)




CONVERTING TO MERLIN   Hey guys...gotta a quick question...I'm trying to
""""""""""""""""""""   convert some source over to Merlin 16..(although 8
bit mode)  Its one of the example programs in the book _Beneath Apple
Prodos_... Its the Zap program. The assembler is the Apple Prodos Assembler
One: What does the pseudo-op  MSB   ON    do ?!?

Two: More pseudo-ops..I think
                              DFB   $03
                              DW    $1000
I assume DFB is Define Byte?  and what is DW...and would merlin's DFB and
DDB do the job ??

any help would be appreciated

/\/\ike
                    (M.HRUSOVSKY, CAT2, TOP6, MSG:96/M530)



>>>>>   MSG ON causes bit7 to be set for ASCII strings. (Most Significant
"""""   Bit)

DFB is DeFine Byte and is the same in Merlin.

DW if Define Word and is the same in Merlin (assuming you're using Merlin
16+, if not use either DDB or preferably DA).

Regards,
 Richard
                    (RICHARD.B, CAT2, TOP6, MSG:97/M530)



>>>>>   > MSG ON causes bit7 to be set for ASCII strings. (Most Significant
"""""   > Bit)

This should be MSB, not MSG (I think Richard has carry out Chinese food on
his mind ;)

In Merlin simply use the " (double quote) around your string. (the '
(single quote) will produce MSB Off ascii instead)

-Harold
                    (HAROLD.H, CAT2, TOP6, MSG:98/M530)



>>>>>    > In Merlin simply use the " (double quote) around your string.
"""""    > (the ' (single quote) will produce MSB Off ascii instead)

Yep, that's one of my pet peeves about ORCA/M. I wish, I wish, I wish it
would allow both kinds of quotes to signify MSB on/off. :)

                    (A2.TONY, CAT2, TOP6, MSG:99/M530)





TIF TROUBLES   if a temp INIT file opens a couple other files, and then
""""""""""""   leaves them open, will the system take care of closing the
files before the START program is run, anyone know?  'Cause for some
reason... In this TIF I'm writing, everything's cool if I leave  the files
open (and by the time it gets to Finder, they're no longer open), but if I
have the INIT close them itself, sometimes GS/OS will yell at me later down
the road with an error $0043 (file reference num not open)...  weird.

                    (B.VICTOR1, CAT1, TOP21, MSG:153/M530)



>>>>>   Temporary inits shouldn't be leaving files open, but I don't know
"""""   what the system does if they do.  You shouldn't be getting invalid
ref num responses later, unless, of course, you're somehow accessing these
files later.  As you're a TIF, this shouldn't be possible.  Hmm.

                    (A2PRO.HELP, CAT1, TOP21, MSG:155/M530)



<<<<<   Yeah, I can't explain it...  I admit I'm a somewhat sloppy
"""""   programmer :) but I traced thru   my code and I'm sure that I'm
ONLY closing the files that -I- opened...  but what'll happen is that
everything the TIF does will work out fine, and the system will load, and
it will be right at the point where it's about to launch Finder, and it
pops up the ol' error box with error $0043...  Which suggests that I'm
closing one of the system's files, although I can't imagine how....   In a
fit of desperation I simply replaced all the _CloseGS with _FlushGS and the
problem has miraculously disappeared...  and SOMEONE's closing those files,
'cause they're no longer open when I get to Finder....   hmm...   :)

-Bret
                    (B.VICTOR1, CAT1, TOP21, MSG:157/M530)



>>>>>   Hmm.  I have no idea what to tell you.  (?).  Um, make sure you're
"""""   not doing a close on ref num 0 (perhaps if there's an error, a zero
is being stored as a ref num, then closed).  That closes -everything-.

...Sloanie
                    (A2PRO.HELP, CAT1, TOP21, MSG:158/M530)



>>>>>   Check your data bank register. Perhaps you're storing your ref num
"""""   into a random bank, meaning your real close defaults to 0 (as
Sloanie mentioned). Just a thought.

Regards,
 Richard
                    (RICHARD.B, CAT1, TOP21, MSG:159/M530)



<<<<<   Hmm, yeah...  I'll check if there is an error that might be
"""""   returning a zero...   but one thing I did was in my parm table,
instead of making space for the refnum result (in the _OpenGS table) with a
"ds 2", I actually used a "da $EEEE", figuring that the $EEEE would be
overwritten with the real refnum if all goes well, and if all didn't go
well, it would try to work on / close file number $EEEE, which couldn't
HARM anything...   but that didn't stop the problem one bit.... ::sigh:: :(

Right now, I'm just flushing the files and leaving 'em open for the system
to close, and all seems to be going well, so...  "?"  :)

 -Bret
                    (B.VICTOR1, CAT1, TOP21, MSG:160/M530)




THAT ANNOYING OPTION KEY   Does anyone know what event code(s), if any,
""""""""""""""""""""""""   TaskMaster returns when the apple and option
keys are held down to make a menu selection (i.e. apple-option-W)?

I'm trying to implement a "close all" function, like the Finder has. Holding
down option appears to disable menu hotkeys (or at least it makes TaskMaster
not hilight the menu title and/or possibly return something different from
wInMenuBar).

I'm using regular resource-template-based menu items, and TaskMaster with
all of the TBR3-defined wmTaskMask flag bits set.  "Menu help" is turned
OFF, if that makes any difference.  (oh...the "Close" item _is_ enabled,
BTW <g>)

Any suggestions would be appreciated.  Thanks. :)

  --Greg Betzel
                    (SNAKEBYTE, CAT15, TOP14, MSG:188/M530)



Greg,

I'd guess that it returns "W" with the option and open-apple (ok, well,
command) modifiers set.

Actually, no, I take it back.

Figure out what ASCII codes Option-W and Option-w get.  You're probably
getting -those- keys with the open-apple modifier set.

Anyway, my best advice is to try it and see what happens.  :)

...Sloanie
                    (A2PRO.HELP, CAT15, TOP14, MSG:189/M530)



>>>>>   two things can happen:
"""""
  1)  You have the event manager's key translation set to "none"

      GetNextEvent will return a keyDown event with "w" and the option
      and command keys set in the eventModifiers field.

      TaskMaster will call MenuKey with "w"..  then will return to you
      with wInMenu (with command and option bits set in eventModifiers)

  2)  You have the event manager's key translation set to something else,
      such as "standard" (which is what 90% of GS users use)

      GetNextEvent will return a keyDown event with whatever key code it
      uses for option-w (depends on what key translation you're using)
      the command key bit (but not the option-key bit, I think) will be
      set in eventModifiers

      TaskMaster will call MenuKey with the code for option-w (again, it
      depends on what your key translation is set to)
      You don't have a menu defined as using this key, so MenuKey doesn't
      do anything.  TaskMaster will return a keyDown event to you,
      with the option-w character and the eventModifiers field set to
      have the command key (but not option, I think) down

                    (A2PRO.GELAMP, CAT15, TOP14, MSG:190/M530)



<<<<<   Sloanie, Tim-
"""""
ACK!  I completely overlooked the possibility that the friendly EventMGR
key translation table might be getting involved.  <g>

_Thanks_ for the help. :)


  --Greg Betzel
                    (SNAKEBYTE, CAT15, TOP14, MSG:191/M530)



TAKING THE P OUT OF PIF   I'm trying to write myself a PIF that is only
"""""""""""""""""""""""   sorta-permanent -- it stays in memory for a
while, doing its thing, and then when it's had enough, I want it to be
unloaded from memory.  My question is, how do I get it to unload itself
when the time comes? 

Also, on a completely different note (but what the hell, the same post)
I have this handle that I can't dispose of -- I call DisposeHandle,
DisposeAll, MMShutDown, everything, and it still sticks around.  (Yeah,
I tried unlocking it).  Weird thing is, I copied some DisposeHandle
code into bank zero and ran it from there, and it worked!  But from
any other bank, no go...   maybe I'm hallucinating from the heat, has
anyone heard of this?

-Bret
                    (B.VICTOR1, CAT20, TOP15, MSG:11/M530)



<<<<<   'Tis me again...  I found a way to kill my PIF -- anyone wanna tell
"""""   me how illegal this is?

RightHere  ~FindHandle #RightHere
           _DisposeHandle

Hey, it works.  As for the other thing, it seems that DisposeHandle
has started working after all, but DisposeAll still does nothing.
Oh well, at least I've got everything goin' okay...

-Bret
                    (B.VICTOR1, CAT20, TOP15, MSG:12/M530)


>>>>>   Bret,
"""""
>> I found a way to kill my PIF -- anyone wanna tell me how illegal this
>> is?

>> RightHere  ~FindHandle #RightHere
>>            _DisposeHandle

Not legal or safe at all. Ever.

After the _DisposeHandle returns you still have code executing, but in
"free" memory... What would happen if something grabbed memory right after
the call returned and before you hit your exit point? 

KRASH! :(

-Harold
                    (HAROLD.H, CAT20, TOP15, MSG:13/M530)


 
>>>>>   Bret, that is seriously dangerous.
"""""
There is NO safe way for a PIF to dispose of itself.  HOWEVER, here are two
ways you can free MOST of its memory:

1. Have the data fork of your PIF just contain code to install the code
resource converter and run a code resource that contains your real code.
When the code resource is done doing its thing, it can call a routine
located in the data fork that disposes of the resource, thereby freeing all
but a small amount of memory.

2. Have your PIF overwrite the first few bytes of itself with code to
shrink its own handle down to be just big enough to contain the code that
shrinks the handle down.  The code would be something like:

NukeMe    pea  $0000
          pea  NukeEnd-NukeMe      ;Size of block
          pea  NukeMe|-16
          per  NukeMe
          _FindHandle              ;Get handle of myself
          _SetHandleSize           ;Fix our size to be JUST right
          rtl                      ;Exit the PIF for good
NukeEnd   anop

When you want to "remove" your PIF from memory, just copy the above code
over the top of the first few bytes of your PIF and then call it at the new
address.  Don't forget to fix the stack, remove HeartBeat and Run Queue
tasks, etc. first. :)

Sheppy
[Team PPCPro]
                    (SHEPPY, CAT20, TOP15, MSG:14/M530)



>>>>>   How about leaving the GS/OS return address on the stack and doing a
"""""   JML to the tool dispatcher for _DisposeHandle? As long as all your
regs are set up OK, it should dispose of your code and return immediately
to the System Loader.

Regards,
 Richard
                    (RICHARD.B, CAT20, TOP15, MSG:16/M530)



<<<<<   Richard,
"""""
Hey, yeah, I like that!  If nobody says that THAT'S illegal too, that's
what I'll do.  Thank ya!

-Bret
                    (B.VICTOR1, CAT20, TOP15, MSG:17/M530)




>>>>>   Actually, I'm stunned I thought of it. It just popped into my head
"""""   when I read the previous posts.

Regards,
 Richard
                    (RICHARD.B, CAT20, TOP15, MSG:19/M530)



>>>>>   Also, if an permanent init decides at boot time it doesn't want to
"""""   stick around, it can set some flag above the return address. Pifs
-might- also get their own stack, but..hm..I think they do, but only at boot
time; very unsure.

  - Jay
                    (JAY.KRELL, CAT20, TOP15, MSG:21/M530)



>>>>>   re: PIF's have an unload flag space on their stack
"""""
BEFORE you depend on this being available, be certain you READ and
UNDERSTAND the file type notes related to PIFs. (and don't assume that
nobody will be loading you (booting) over an AppleTalk system. That is
legal, and while it's slow there are quite a few people who do this for
various reasons)

In a nutshell, the "Unload Me" flag space may not always be available, and
depending on it being there at all times is a BIG no-no, which if ignored
can and will bring a users system to a screaching BRK during the boot
process... ick.

The FTN reveals all :)

-Harold
                     (HAROLD.H, CAT20, TOP15, MSG:22/M530)



>>>>>   Yes, PIFs get a 4k DP/stack area by default (which can be changed
"""""   by linking in a stack segment).

Sheppy
[Team PPCPro]
                    (SHEPPY, CAT20, TOP15, MSG:23/M530)




>>>>>   Harold, I thought they fixed the AppleTalk unload-me flag problem
"""""   in 6.0 or 6.0.1 ...

Of course, if you want to be 5.0 compatible, you still have to be careful.

Todd Whitesel
                    (A2PRO.TODDPW, CAT20, TOP15, MSG:24/M530)



<<<<<   Here's what the FTN has to say about it:
"""""
| WARNING: This WORD space is not available to permanent
|          initialization files that execute from a user's folder on
|          an AppleShare file server at boot time unless you're
|          using System Software 6.0 or later.

So you're both right.  :)

-Bret        >>>  so sez CoPilot 2.55

                    (B.VICTOR1, CAT20, TOP15, MSG:26/M530)



>>>>>   Bret,
"""""
Ah ha! So you DO have some docs :)

And yes, that is =exactly= the warning I was refering to, thanks for
posting it :)

-Harold
                    (HAROLD.H, CAT20, TOP15, MSG:27/M530)




>>>>>   As I recall (but didn't feel like checking), the file type note
"""""   doesn't say you can 'easily' check for the result space. It leaves
you thinking you have to look for Appletalk/share/? and such and figure if
you were run from it (LGetPathname2, GetFileInfo?), but Matt's IR 2.x
source shows an easier method, along the lines of, if the space above the
return address is zero, it's result space.

                    (JAY.KRELL, CAT20, TOP15, MSG:28/M530)



>>>>>   Jay,
"""""
re: PIF "Unload Me" flag space on entry stack

>>...if the space above the return address is zero, it's result space.

Bingo. This is the reccomended procedure, and it hasn't failed me so far :)

The only thing is... what if your code determines that the result space
isn't there, and your code has also determined that it doesn't want to
stick around... Guess that's when Richard's idea of JML'ing to the tool
dispatcher (for the _DisposeHandle) call comes in handy :)

-Harold
                    (HAROLD.H, CAT20, TOP15, MSG:29/M530)



>>>>>   You could always make yourself a TIF and if you want to stay
"""""   resident just allocate some permanent memory and hop right in!
Talking about turning a problem on it's head...

                    (RICHARD.B, CAT20, TOP15, MSG:30/M530)



<<<<<   Harold,
"""""
>   Ah ha! So you DO have some docs :)

Okay, in a fit of desperation the other day I d/l'd the Tech notes and
FTNs...  (And they actually DID help... amazing!)  Forgive me?  :)

-Bret        >>>  so sez CoPilot 2.55

                    (B.VICTOR1, CAT20, TOP15, MSG:31/M530)



<<<<<    Richard,
"""""
> You could always make yourself a TIF and if you want to stay resident
> just allocate some permanent memory and hop right in!

Ooh, how, how, please tell me!!!  I could not for the LIFE of me get the
handles my TIF grabbed to stay in memory!  (Then again, I don't really know
what I'm doing, so... :)

-Bret        >>>  so sez CoPilot 2.55

                    (B.VICTOR1, CAT20, TOP15, MSG:32/M530)



>>>>>   Bret,
"""""
The safest way is to use _GetNewID (I think that's the name, I haven't used
it in years and my manuals aren't here right now) from the Miscellaneous
Toolset to allocate a new ID, which the loader will not dispose of.

The you can either _NewHandle with it, or _SetUserID on a current handle,
your choice. _NewHandle is the easiest and safest.

Regards,
 Richard

(I am assuming you have AT LEAST TBR1&2. If not, you MUST get them!)

                    (RICHARD.B, CAT20, TOP15, MSG:33/M530)



>>>>>   Richard,
"""""   yes, it's _GetNewID.  But there's no such thing as _SetUserID.
It's _SetHandleID :)

                    (A2PRO.GELAMP, CAT20, TOP15, MSG:34/M530)




                         >>> MESSAGE SPOTLIGHT <<<
                         """""""""""""""""""""""""


FUTURE MERLIN ENHANCEMENT?   I'm just tossing around some ideas here. How
""""""""""""""""""""""""""   about these for possible projects.

Merlin assembler memory resident that can assemble code via IPC requests.

Merlin able to edit/assemble files larger than 64K.

Merlin able to read standard OMF (ORCA/APW) libraries.

Merlin able to INPUT OBJ files during a link (it can already OUTPUT OBJ
files during assembly).

Merlin as an MPW cross assembler.

Do any of these take peoples' fancies?

BTW, FWIW, I've listed them in order of difficulty.

Regards,
 Richard
                    (RICHARD.B, CAT2, TOP5, MSG:51/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 urges  you to give  the bulletin board  area a  try.
    There are literally thousands  of messages posted from people
    like you from around the world.


                               [*][*][*]



[EOA]
[DEV]//////////////////////////////
              DEVELOPER'S CORNER /
/////////////////////////////////
News From The A2Pro Online Developers
"""""""""""""""""""""""""""""""""""""
By Tim Buchheim
 [A2PRO.GELAMP]


    o   MANY BOOKS MADE AVAILABLE AGAIN BY THE BYTE WORKS!

         o   BYTE WORKS CLEARANCE SALE

              o   DEBUGGER DEFICIENCY

                   o   ORCA/C HELP




                      >>> 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.





      >>>  MANY BOOKS MADE AVAILABLE AGAIN BY THE BYTE WORKS!  <<<
      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""


HyperCard Books   I explored some of the contractual issues behind APDA
"""""""""""""""   with Uncle Tom [he means Uncle DOS, or Tom Weishaar -ed.]
at KansasFest this year, and to make a long story short, I can reprint the
HyperCard manuals.  Now that I know I _can_, I need to decide if I
_should_... and that's where you folks come in!

If they are reprinted, the books would be laserprinted on 3 hole paper for
notebooks.  You would need to supply your own notebook,  although we can see
about getting some for non-US customers, who may have trouble finding them
the correct size.

There are 3 volumes, and of course the disks.  Here's the prices we will
need to charge:

 APDA 48  Getting Started with HyperCard IIGS     156 pages   $15
 APDA 49  HyperCard IIGS Reference                389 pages   $25
 APDA 50  HyperTalk Beginner's Guide IIGS         171 pages   $15
 APDA 51  HyperCard IIGS Disks                    6 disks     $20
 APDA 52  APDA 48-51 in a package                             $60

It costs some money to set up the orignal masters, too, so what I need to
know is whether you folks want these books, and want them bad enough to order
them.  Here's how I will tell:

You can order these books now by credit card.  You won't be charged right
away.  If we get 10 orders, we'll put HyperCard back in print. At that time,
you'll be charged, and we'll start the reproduction process.  About 2 weeks
later, We'll ship your copies of HyperCard.

If we don't get 10 orders, we won't put it back in print.

Once it's back in print, it stays in print.  The cost for us is getting
things set up and producing originals for laserprinting; once that's done we
can print manuals in very small numbers.

If you would like to place an order for HyperCard, please do!  All of the
normal contact and shipping apply; specifically:

  Byte Works, Inc.
  8000 Wagon Mound Drive NW
  Albuquerque, NM  87120

  (505) 898-8183

  AOL     : MikeW50
  Internet: MikeW50@AOL.COM
  GEnie   : ByteWorks

  Shipping: $5 in US, shipping cost rounded to the next higher dollar
            elsewhere

If you order by mail and send a check, please use two checks--one for this
product, and one for everything else, so we won't have to cash the check to
send what we have now!

If you have access to other online services, magazines, or other places where
Apple II people gather, please spread this message around.

Mike Westerfield
                    (BYTEWORKS, CAT18, TOP4, MSG:38/M530)
 


HyperCard IIGS Manuals Back In Print   Yesterday the number of orders for
""""""""""""""""""""""""""""""""""""   HCIIGS orders soared from 7 to 11.
We hit the break-even point, and placed the first order for books today.

Thanks to all of you who decided to place an order for a product that might
or might not have eventually become a reality.  You made it one!

And for all you bashful people who were waiting to see, you can now order
HCIIGS manuals from us.  I'll repost the details in a couple of days with an
official press release.

For those of you who have placed an order, it will probably be about a week
to 10 days before you are charged, and the packages will ship from here 2-3
days later.

Mike Westerfield
                    (BYTEWORKS, CAT36, TOP34, MSG:43/M530)



New APDA Products   Hopefully some of you have already seen the notice in
"""""""""""""""""   Cat 18, Top 4 about the HyperCard manuals.  Here's the
basic story:  The simple version of the APDA contract is that we can put
pretty much any Apple II technical information back in print, so long as it
was developed at Apple and published by Apple (i.e., not Addison-Wesley,
darn it all).

That's pretty broad, though.  It means we can put some classic as well as
some useful stuff back in circulation.  Everything from the Red Book to the
Apple //e Applesoft books to the Apple //e Reference Manual are fair game.

So, if there's an Apple II publication you want to see available again, let
me know.  If I can find a copy to use as a master, and there are at least 10
people interested in buying the product, we'll try to put it back in print.

If you know of a product you'd like to see, send the name of the product to
me, and watch GEnie or AOL for ordering information and announcements of ship
dates.

 Mike Westerfield
 Byte Works, Inc.
 8000 Wagon Mound Dr. NW
 Albuquerque, NM  87120

 AOL     : MikeW50
 GEnie   : ByteWorks
 Internet: MikeW50@AOL.COM
 Phone   : (505) 898-8183

                    (BYTEWORKS, CAT36, TOP34, MSG:33/M530)



                    >>>  BYTE WORKS CLEARANCE SALE  <<<
                    """""""""""""""""""""""""""""""""""


Sale on Some Byte Works Products!   Hurry -- this offer expires
"""""""""""""""""""""""""""""""""   October 31st, 1995.

We're cleaning house, and you're the winner!  In the best summer tradition,
the Byte Works is having a garage sale to clear out boxes of high-quality,
printed manuals from the days before laserprinting. Back in those days, we
had to print 1000 copies of a product to keep the unit cost down.  Today,
we're faced with several boxes each of some products.  We don't want to
throw them out, but we don't want to store more than we'll ever need.

Se we decided to sell these popular products to you at garage sale prices. 
How low will we go?  As low as 60% off of mail order prices! You decide the
price, because the more you buy, the lower the price. Buy just one product
from this list, and you already get a substantial 25% discount.  But if you
buy two programs, either from this list or from our general catalog, you
take 33% off of any program in the sale list.  Buy any 4 or more programs
from our current catalog and you take 60% off of any program in our sale
list!  At one time, distributors paid more for these programs when they
ordered them by the hundred!

Of course, you might be wondering if we'll ever do the same thing with our
other programs.  In a word, no.  You see, all of our other programs are
printed as we need them, so we don't have boxes of them sitting in storage. 
Only the products on this sale list will ever be sold at prices like these.

But hurry, because even these products won't be sold at garage sale prices
forever!  On Halloween night, October 31, 1995, we'll throw out all of the
extra programs.  And if we get down to the last box of any program, we'll
stop selling it at the sale price--we want to keep a few for desparate
people in the years to come!  So if you want unbelievable garage sale
prices on some of our most popular programs ever, get your order in fast!

 Cat #  Product          Retail  Buy 1   Buy 2   Buy 3   Buy 4+
 -----  ---------------  ------  ------  ------  ------  ------
 II-03  ORCA/M 4.0       $60.00  $45.00  $40.20  $30.00  $24.00
        Add AW-20, Assembly Language for Applesoft Programmers,
        $18.95 from our current catalog to learn how to program
        in 6502 assembly language!
 II-04  MON+             $25.00  $18.75  $16.75  $12.50  $10.00
 II-05  O/S Source       $25.00  $18.75  $16.75  $12.50  $10.00
 II-06  Floating Point   $25.00  $18.75  $16.75  $12.50  $10.00
 GS-04  ORCA/M GS        $75.00  $56.25  $50.25  $37.50  $30.00
        Add BD-06, GS Assembly Book Bonanza, $25 from our current
        catalog to learn Apple IIGS assembly language programming!
 GS-08  Integer BASIC    $30.00  $22.50  $20.10  $15.00  $12.00
 GS-09  Design Master    $40.00  $30.00  $26.80  $20.00  $16.00
 GS-10  Disassembler     $30.00  $22.50  $20.10  $15.00  $12.00
 GS-11  ORCA/Debugger    $30.00  $22.50  $20.10  $15.00  $12.00
 GS-12  Talking Tools    $35.00  $26.25  $23.45  $17.50  $14.00

If you have questions or would like to place an order, please get in touch
with us at:

 Byte Works, Inc.
 8000 Wagon Mound Dr. NW
 Albuquerque, NM  87120

 AOL      : MikeW50
 GEnie    : ByteWorks
 Internet : MikeW50@AOL.COM
 Phone    : (505) 898-8183

If you would like a complete catalog, just ask!  Be sure and include you
mailing address; our catalog is printed.

                 (BYTEWORKS, CAT36, TOP31, MSG:53/M530)



                     >>>  DEBUGGER DEFICIENCY  <<<
                     """""""""""""""""""""""""""""


INDENT 40   Someone mentioned a long time ago that it would be nice to be
"""""""""   able to scroll the listing while in step mode.  I've been using
this program for a few weeks now, and I think that being able to scroll
horizontally while in step mode would be great.. it can be annoying
sometimes to hit escape, type an indent command, and then go back into step
mode..

(I guess I'll have to learn to stop indenting my pascal code too much :)

                 (A2PRO.GELAMP, CAT36, TOP29, MSG:39/M530)



>>>>>   Sounds reasonable, Tim.  I need to beef that program up a bit;
"""""   maybe I'll add this feature when I do.

You should see _my_ Pascal code.  Some of it is literally indented 40 columns
or so!

Mike Westerfield
                  (BYTEWORKS, CAT36, TOP29, MSG:40/M530)



                          >>>  ORCA/C HELP   <<<
                          """"""""""""""""""""""

 
CAN I DO THIS?   Is the following legal?
""""""""""""""

  int test;
  unsigned bit1:1;
  .
  .
  .

  test=bit1;

If not, how would I get a bit field moved into an int variable? With the
regular variables, I can stuff a lower class into a higher class, e.g.,

  float_variable=int_variable;

and I was wondering if the same is true for bit fields. The ORCA/C manual
is silent on this, and so is the other manual I am using, the one for
PowerC for the PC. (At least I couldn't find it in either.)


 -=Joat=-
                    (A2.TIM, CAT36, TOP11, MSG:569/M530)



>>>>>   Yes, it's legal.  So is the reverse, although there are clearly
"""""   values that would not fit in a bit; in that case the result is
"implementation defined" (the language designer's way of saying the
compiler can do anything it wants, including crash), although ORCA/C and
most others would simply and the value down to a number of bits that would
fit.

Mike Westerfield
                    (BYTEWORKS, CAT36, TOP11, MSG:570/M530)




<<<<<   OK, I got another one. ORCA/C is telling me I have problems with
"""""   this. I know what the problem is, but I don't know how to get
around it.

What I want to do is pass a long integer source number, and an integer
number telling the function how many string characters to return. I wrote
this last night before I found out today that there is a _INT2DEC call. :)
In any case, I learned a lot doing this, but apparently not enough. ORCA is
telling me I can't use the [digits] subscript in the char Output[]
declaration. If I don't put it there, then I get errors later, and ORCA
gives me a type mismatch error when I try to stuff the overflow '*'s later.
I have another one that does a similar thing for Hex, which is later in the
source file, so I presume it has the same error, but ORCA halts on error
checking with this one.

I did a oa-L to find errors, and then tried to compile for a lark. Is there
a way to get ORCA to go through the complete file to find all the errors,
rather than stopping at the first error?

BTW, any other hints as to the way I coded would be appreciated. Please
speak slowly and be very kind. This is essentially my first C programming
attempt for about 4-5 years. (Special thanks to Joe Wankerl for some major
help last night to get me at least this far. :)

char *DecToString(long input, int digits)
{
int i;
long dec;
char Output[digits];
char DecString[]={"0123456789"};

dec=input;

if (pow(10,digits)<dec)
     for (i=digits; i>0; i--)
          {
          Output[i-1]="*";
          }
else
     for (i=digits; i>0; i--)
          {
          Output[i-1]=DecString[dec%10];
          dec=dec/10;
          }
}
return (Output);

Thanks for any help.


 -=Joat=-
                    (A2.TIM, CAT36, TOP11, MSG:571/M530)



<<<<<   I vaguely remembered from a C programming class I took 6 years ago
"""""   that there was an exponent operator in C (**). I could find no
reference to it in the ORCA manuals. Am I confusing it with another
language? The only way I could see to raise to powers was the pow()
function, which was not exactly what I was looking for.

I thought it was used thus....

  int c, a, b;
  a=5;
  b=2;
  c=a**b;

in which case c would be 25.

Am I in the early stages of senility here? Or is it compiler dependent?

 -=Joat=-
                    (A2.TIM, CAT36, TOP11, MSG:572/M530)


>>>>>   You can't define your output array that way.  The compiler has no
"""""   notion of how big the array is at compile time, and that's sort of
important.  You can either define your output array at a fixed size (and
make sure you don't overflow the array) or you could dynamically allocate
space for your array.

                    (WANKERL, CAT36, TOP11, MSG:574/M530)



<<<<<    > You can't define your output array that way.
"""""
No duh!  :)

 > The compiler has no notion of how big the array is at compile time, and
 > that's sort of important.

I figured that was the cause, but.....

 > You can either define your output array at a fixed size (and make sure
 > you don't overflow the array) or you could dynamically allocate space
 > for your array.

How do I dynamically allocate space for the array? For the meantime, I will
probably just fix the space at my largest callable size.  I can always put
a check to make sure the parameter is never larger than the array size.

But I guess I need some help with a concept.

Let's say I do the following....

 char array[10];

 array[]={"Test"}

When I take the value in array[], and send it to print out, will I get...

 Test......        /*the '.' are spaces */

or will I get

 Test              /* only the word itself */


 -=Joat=-
                    (A2.TIM, CAT36, TOP11, MSG:575/M530)


>>>>>   Joat,
"""""
You can allocate memory with the malloc() and free() standard C library
functions. They work well for what you're thinking of doing.

However, looking at your DecToString() function reminds me of the sprintf()
function (p 359). It'll output just about anything into a formatted string.

Michael
                    (ANIMASIA, CAT36, TOP11, MSG:576/M530)



>>>>>   C (and ORCA/Pascal, for that matter) uses the character (char) 0 to
"""""   indicate the end of a string.  So, when you create

   char array[10] = {"test"};

the array is filled with 4 characters, followed by 6 (char) 0 characters.
When you print this string, or manipulate it with any of C's string
functions, only the first 4 characters are used.

BTW, the syntax you used:

   char array[10];
   array[] = {"test"};

won't work.  You can only use an initializer on the original declaration. To
assign a string after the fact, use strcpy, like this:

   strcpy(array, "test");

C has no way of knowing if you are overflowing the available memory for a
string.  You have to add extra code to test for that situation, or risk a
crash.  If you want that kind of safety, use ORCA/Pascal. Pascal _does_
know how long a string buffer is, and will guard against overflows.

There is no exponent operator in C.  The syntax you refer to is from
Fortran.  It's also implemented in many BASICs and in ORCA/Pascal. From C,
use pow() from <math.h>.  It won't always be as efficient as an exponent
operator in a high-level language--none of C's math operations are, since
they are built in via libraries, and thus can't be optimized properly--but
it will raise one number to the power of another.

Mike Westerfield
                    (BYTEWORKS, CAT36, TOP11, MSG:577/M530)


     ///////////////////////////////////////////// GEnie_QWIK_QUOTE ////
    / ACK!  I completely overlooked the possibility that the friendly /
   /  EventMGR key translation table might be getting involved.  <g> /
  //////////////////////////////////////////////////  SNAKEBYTE  ////


[LIB]//////////////////////////////
             LIBRARY BIT BONANZA /
/////////////////////////////////
HOT Files You Can Download
""""""""""""""""""""""""""
By Tim Buchheim
 [A2PRO.GELAMP]


    o   NEW FILES IN THE A2Pro LIBRARIES



             >>>  NEW FILES IN THE A2Pro LIBRARIES  <<<
             """"""""""""""""""""""""""""""""""""""""""
                  ~ Get Them While They're Hot! ~



File # 4841  ADDINLINE.BXY  (GS)
Uploaded on 9/1/95 by WANKERL
About 21K (d/l time approx. 2 minutes @ 2400 baud)


AddInline is a utility that runs under the ORCA/Shell which
imbeds inline procedure names in object code.  The object
code you use is best if it comes from a high level language
like C or Pascal.  You can then use GSBug to step through
your compiled code and actually see the subroutines!  :-)



File # 4823  MANPACK30.BXY  (GS)
Uploaded on 8/14/95 by S.REEVES2
About 179K (d/l time approx. 18 minutes @ 2400 baud)


Various programs for working with manual pages, by Devin Reade
<gdr@myrias.com>.  This archive includes:
         apropos    v3.0       locate commands by keyword
         catman     v1.0       format cat pages from man pages
         makewhatis v1.2       create the whatis database
         man        v3.0       display reference manual pages
         whatis     v3.0       locate commands by name
ORCA/C source code for these utilities is included.  Requires an 
Apple IIgs and GNO/ME v2.0 or higher.



                               [*][*][*]


    I'm sorry this  list is so short  this month,  but that's all
    there was.  (Although the jump in file numbers indicates that
    private beta  test libraries  must have been active.)   Maybe
    this month more  of you will upload your files  to share with
    us.  Don't worry about whether  your source code is beautiful
    or whether  your programs  look professional.   A2Pro  is for
    programmers.   We can  deal with your program's  command line
    or unfinished features! :)


                               [*][*][*]



[EOA]
[RTC]//////////////////////////
                   RTC WATCH /
/////////////////////////////
Bits and Pieces from A2Pro Real Time Conferences
""""""""""""""""""""""""""""""""""""""""""""""""
By Tim Buchheim
  [A2PRO.GELAMP]


     o   A2Pro WEEKLY RTC SCHEDULE

          o   SPOTLIGHT ON: HangTime



                     >>> A2Pro WEEKLY RTC SCHEDULE <<<
                     """""""""""""""""""""""""""""""""
      _______    __________   _________
     /_______|  /_________/  /________/     SEVEN days a week!!
    /__/__/__/     /__/     /__/
   /________/ EAL /__/ IME /__/ ONFERENCES in A2Pro!!
  /__/  /__|     /__/     /__/_____
 /__/  /__/     /__/     |________/      WEEKLY SCHEDULE
 
  Stop in and say "Hi!" at one of these conferences.  We've been giving
away quite a few GEnie usage credits (free time) at these conferences,
and you may just win the next one! :)
 
 Day      Time        Event                                Host
 --- ---------------  -----------------------------------  -----------
 Sun  8:30pm-11:00pm  Weekly Programmers' RTC              Sloanie
 Mon  9:30pm-11:00pm  GS/OS and Toolbox Calls              Dave Miller
 Tue  9:30pm-11:00pm  8-bit Programming                    Russ Nielson
 Wed  9:30pm-11:00pm  HangTime's HyperBar & Grill          HangTime
 Thu  9:30pm-??:??    Informal - Q&A, chat, whatever       A2Pro Staff
 Fri  9:30pm-11:00pm  Getting Started with Programming     Tim Buchheim
 Sat  8:30pm-10:00pm  Assembly Language Programming        Brian Wells
 
                  NOTE: All times are in Eastern Time.
                  ~~~~



                     >>> SPOTLIGHT ON: HangTime <<<
                     """"""""""""""""""""""""""""""

HE'S EVERYWHERE!   Right now you're probably saying to yourself, "Wait a
""""""""""""""""   minute!  Didn't I read a section earlier in this issue
with the exact same title?"  Well, yes, you did.  (Unless you are reading
this backwards, or something.)  But HangTime didn't even mention that he
hosts not one but TWO Real Time Conferences each week!  So I felt that I
should say something about it here. :)

Everyone [who reads this issue at least] knows that HangTime is a certified
HyperCard freak.  (I think I'm allowed to say that.  If I still have a job
in A2Pro the day after this is published, I'll know that for sure. ;)  On
Wednesday nights, he hosts HangTime's HyperBar & Grill.  (How's that for an
alliteration? :)  If you ever need to know anything about HyperCard GS,
HyperTalk, XCMDs, XFCNs, or anything else 'hyper', this is your chance!
By the way, if you don't have HyperCard, you can download it from A2Pro's
libraries.  Keep in mind that HyperCard requires a hard drive and a decent
amount of memory to operate.  If you need printed manuals, contact Mike
Westerfield (email BYTEWORKS).

On Thursday night, HangTime is back again.  (Yes, I am aware of the fact
that the schedule listed above says "A2Pro Staff."  But nine times out of
ten, that means HangTime.  He must be crazy to host two RTCs per week; it's
not as easy as it looks :)

Thursday nights have no official topic.  Yes, you can ask HangTime all the
HyperCard questions you want.  He'll love it. :)  But you don't have to.

(BTW: If you're wondering why there are no "Bits and Pieces from A2Pro Real
Time Conferences" this month, it's because I was on vacation and didn't
attend enough RTCs to have anything interesting to print here.  Also, I
forgot to tell the other A2Pro staff to turn on their capture buffers for
RTCs and send them to me. :)




[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        IBM PC Prog     IBMPCPRO     617
PowerPC         PPC          1435        PowerPCProg     PPCPRO      1440



    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.com

    o Back issues of GEnieLamp are available in the DigiPub RoundTable
      Library #2 on page 1395 (M1395;3).  Internet users should use
      the GEnie gopher (gopher.genie.com) which has most back issues
      (but might be missing a few of them).

    o GEnieLamp pays for articles submitted and published with online
      GEnie credit time.  Upload submissions in ASCII format to library
      #31 in the DigiPub RoundTable on page 1395 (M1395;3) or Email it to
      GENIELAMP.  On Internet send it to: genielamp@genie.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
 """""""""  o Mike White          [MWHITE]       Managing Editor

  APPLE II  o Doug Cuff           [EDITOR.A2]    A2 EDITOR
  """"""""  o Gina E. Saikin      [A2.GENA]      A2 Staff Writer
            o Charlie Hartley     [A2.CHARLIE]   A2 Staff Writer

     A2Pro  o Tim Buchheim        [A2PRO.GELAMP] A2Pro EDITOR
     """""
     ATARI  o Sheldon H. Winick   [GELAMP.ST]    ATARI EDITOR
     """""  o Bruce Smith         [B.SMITH123]   EDITOR/TX2
            o Mel Motogawa        [M.MOTOGAWA]   ST Staff Writer
            o Richard Brown       [R.BROWN30]    ST Staff Writer
            o Al Fasoldt          [A.FASOLDT]    ST Staff Writer
            o Timothy V. Steed    [T.STEED1]     ST Staff Writer

       IBM  o Sharon La Gue       [SHARON.LAMP]  IBM EDITOR
       """  o Tika Carr           [LAMP.MM]      MULTIMEDIA EDITOR
            o David Leithauser    [D.LEITHASUER] HyperRead Editor
            o Bob Connors         [DR.BOB]       IBM Staff Writer
            o Susan M. English    [S.ENGLISH1]   Multimedia Graphics Artist

 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

  POWER PC  o Ben Soulon          [BEN.GELAMP]   POWER PC EDITOR
  """"""""

   WINDOWS  o Bruce Maples        [GELAMP.WIN]   WINDOWS EDITOR
   """""""  o Marlene Gaberel     [M.GABEREL1]   Windows Staff Writer

      ETC.  o Jim Lubin           [J.LUBIN]      Add Aladdin Scripts
      """"  o Scott Garrigus      [S.GARRIGUS]   Search-ME!
            o Mike White          [MWHITE]       (oo) / DigiPub SysOp
            o John Peters         [GENIELAMP]    DigiPub SysOp
            o Al Fasoldt          [A.FASOLDT]    Contributing Columnist
            o Phil Shapiro        [P.SHAPIRO1]   Contributing Columnist
            o Sandy Wolf          [S.WOLF4]      Contributing Columnist
            o Lloyd E. Pulley     [LEPULLEY]     Contributing Columnist


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////
 Opinions expressed herein are those  of the individual authors, and do
 not  necessarily  represent  opinions of  GEnie Information  Services,
 GEnieLamp Online Magazines, or T/TalkNet  Online Publishing.  Bulletin
 board messages are reprinted verbatim, and are included in this publi-
 cation with permission  from GEnie Information Services and the source
 RoundTable.   GEnie Information Services,  GEnieLamp Online Magazines,
 and T/TalkNet Publishing  do not guarantee the accuracy or suitability
 of any information included herein.   We reserve the right to edit all
 letters and copy.

 Material  published in  this edition may be  reprinted under the  fol-
 lowing 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.  Please include the fol-
 lowing at the end of all reprints:

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\///////////////////////////////////
 The  preceeding article  is reprinted  courtesy of  GEnieLamp  Online
 Magazine.  (c) Copyright 1995 T/TalkNET  Publishing and  GEnie Infor-
 mation Services.  Join GEnie  now and receive $50.00 worth  of online
 credit. To join GEnie, set your modem to 9600 baud (or less) and half
 duplex (local echo).  Have the modem dial 1-800-638-8369.  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. GEnie
 will  then  prompt  you  for   your  signup  information.   For  more 
 information call (voice) 1-800-638-9636.
////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
[EOF]
