

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

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


                      ~ WELCOME TO GENIELAMP A2Pro! ~
                        """""""""""""""""""""""""""

                          ~ Learning to Program ~
                     ~ New A2U Course ~ Windows Menus ~
                  ~ ORCA/Debugger 1.1 Ships ~ Splat! Ships ~
               ~ Programmers Reference for System 6.0.1 Ships ~
            ~ ORCA/Modula-2 RTC Transcript ~ Tour of 8/16 Central ~
                    ~ HOT NEWS, HOT FILES, HOT MESSAGES ~

////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 GEnieLamp A2Pro   ~ A T/TalkNET OnLine Publication  ~  Vol.3, Issue 11
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 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 ~ A2-Central ~ LiveWire (ASCII) ~ GEnieLamp MacPRO ~
              ~ 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? <<<
          """""""""""""""""""""""""""""""""""""""""""""""""""""""
                             ~ January 1, 1994 ~

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

 A2PRO ROUNDTABLE STAFF .. [DIR]        TOUR OF 8/16 CENTRAL .... [TOU]
  Directory of A2Pro Staff.              Great Programmers Magazine.

 LIBRARY BIT BONANZA ..... [LIB]        RTC WATCH ..............  [UDU]
  HOT Files You Can Download.            Tales from A2Pro RTCs.

 DEVELOPERS CORNER ....... [DEV]        ORCA/MODULA-2 RTC ....... [OM2]
  News From Online Developers.           The new compiler for the GS.

 CAMPUS GREEN ............ [CAM]        LOG OFF ................. [LOG]
  New A2U Course Starts.                 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 for 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, are allowed without charge.  GEnie's
non-prime time connect rate is $3.00.  To sign up for GEnie service, call
(with modem) 1-800-638-8369.  Upon connection type HHH.  Wait for the U=
prompt.  Type:  XTX99014,DIGIPUB and hit RETURN.  The system will then
prompt you for your information.  Need more information?  Call GEnie's
customer service line (voice) at 1-800-638-9636.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""



[EOA]
[FRM]//////////////////////////////
                 FROM MY DESKTOP /
/////////////////////////////////
Notes From My Desktop
"""""""""""""""""""""

     o TOP OF THE PAGE


                          >>> TOP OF THE PAGE <<<
                          """""""""""""""""""""""

HAPPY NEW YEAR!   And welcome to the first 1994 issue of GEnieLamp A2Pro!
"""""""""""""""   A2Pro has been as busy as ever during the past holiday
season, and you can read all about it in this issue!  The Byte Works and
Procyon continue to support Apple II programmers with new releases such as
the long awaited Programmers Reference for System 6.0.1, the ORCA/Debugger
1.1 update and the Splat! debugger.  The A2 University List Manager class
has ended and a new class on eight-bit assembly programming will be
starting this month.  Be sure to check out the Campus Green column for more
information.

     Enjoy, and have a happy 1994!

                                                 Nate Trost
                                               GEnieLamp A2Pro



[EOA]
[DIR]//////////////////////////////
          A2PRO ROUNDTABLE STAFF /
/////////////////////////////////
By Nate Trost
 [A2PRO.GELAMP]
                          ______________________________________________

                           APPLE II PROGRAMMERS & DEVELOPERS ROUNDTABLE
       _____  ______      ______________________________________________
      /_____|/______\
     /__/|__|  ___|__|         Head Sysop: Matt Deatherage  (M.DEATHERAGE)
    /__/_|__| /_____/          Assistants: Greg Da Costa    (A2PRO.GREG)
   /________|/__/       __ __ __           Todd P. Whitesel (A2PRO.TODDPW)
  /__/   |__|__/______ /_//_// /           Jim Maricondo    (A2PRO.DYAJIM)
 /__/    |__|________//  / \/_/            Nate Trost       (A2PRO.GELAMP)

                                 [*][*][*]



[EOA]
[HEY]//////////////////////////////
              HEY MISTER POSTMAN /
/////////////////////////////////
Is That A Letter For Me?
""""""""""""""""""""""""
By Nate C. Trost
  [A2PRO.GELAMP]

     o   BULLETIN BOARD HOT SPOTS

           o   WHAT'S NEW?
           
                 o   PROGRAMMER'S TIPS

                       o   HOT TOPICS

                             o   MESSAGE SPOTLIGHT



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

 [*]  CAT8,   TOP5,   MSG{91}.................Using the GS Device Drivers
 [*]  CAT8,   TOP7,   MSG{87}........Programming with ProDOS 16 and GS/OS
 [*]  CAT9,   TOP7,   MSG{43}................Applesoft BASIC help please!
 [*]  CAT11,  TOP15,  MSG{14}..................Macintosh FOND file format
 [*]  CAT15,  TOP4,   MSG{84}................................QuickDraw II
 [*]  CAT15,  TOP6,   MSG{66}...............................Event Manager
 [*]  CAT22,  TOP25,  MSG{6}..............List Manager Tricks and Secrets
 [*]  CAT29,  TOP27,  MSG{47}........................Programming in METAL
 [*]  CAT36,  TOP3,   MSG{56}................Rumors, Wishes and Vaporware


                      >>>BULLETIN BOARD NEW TOPICS <<<
                      """"""""""""""""""""""""""""""""
                      
 [*]  CAT11, TOP19.................................MIDI data file formats
 [*]  CAT30,  TOP9.......................New Splat! Source-Level Debugger



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

SYNTHLAB FILE FORMATS   Does anyone happen to know where I can get the 
"""""""""""""""""""""   format for a synthLAB song file?  It doesn't seem 
to be on the System 6.0 CD ROM...

Mike Westerfield

                 (BYTEWORKS, CAT11, TOP19, MSG:4/M530)

<<<<<   I recently uploaded my MIDI Synth file printer and player, 
"""""   synthfile, to the A2Pro library.  It includes complete ORCA/C 
source, including a header file that defines offsets into each of the
MIDI Synth file types.  Note: synthfile only runs under a shell program
(such as ORCA's or GNO's).

     GS+ Magazine will be publishing a program to convert MIDI files to 
MIDI Synth sequence format in the Jan/Feb '94 issue.  If you subscribe 
and get the monthly disk, you will receive complete ORCA/C source code.
MIDI Surgeon is a desktop program, and performs all sorts of interesting
things to sequence files.

             (D.TRIBBY [Dave], CAT11, TOP19, MSG:7/M530)


UPDATES FOR ORCA PRODUCTS ONLINE   For those of you who have not signed 
""""""""""""""""""""""""""""""""   up, we have private libraries here on
GEnie for registered owners of ORCA products.  I use them to upload beta
versions of the software as bugs are fixed.  Recent uploads fix bugs in
PRIZM and the Linker.

     If you are a regsitered owner of ORCA/M 2.0.3, ORCA/Pascal 2.0.1, 
ORCA/C 2.0.1 or ORCA/Modula-2 1.0, and would like access to these
libraries, please send your name AND ADDRESS to me by e-mail.

Mike Westerfield

                (BYTEWORKS, CAT36, TOP3, MSG65/M530)



                        >>> PROGRAMMER'S TIPS <<<
                        """""""""""""""""""""""""

PRODOS 8 PATHNAME LIMITS   Is the FILENAME$() command restricted to 
""""""""""""""""""""""""    returning filenames that are only 60
characters max?  For some reason, FILENAME$() is not returning the full
path:

 /BBS/ANET2.EMPORIUM/ANET2/USERS/FONG/UPLOAD.QUEUE/COPYRIGHT.INFO

 (FILENAME$() will drop the last 3 characters.)  Why's this?

 Derek Fong

              (M.POTTER4, CAT29, TOP27, MSG:54/M530)

<<<<<   That's a limitation of ProDOS 8, not of the FILENAME$() command.  
"""""   ProDOS 8 can only handle a 64 character pathname.

              (JUST.DAVE, CAT29, TOP27, MSG:55/M530)

>>>>>   Really?  I wasn't aware that ProDOS-8 couldn't handle paths >64 
"""""   chars. Can you suggest a workaround for my problem then?

 Derek Fong

              (M.POTTER4, CAT29, TOP27, MSG:56/M530)

<<<<<   Sure - easy workaround.
"""""
Change the directory/file names so that the total pathname is at most 64
characters.  :)

          (A2PRO.HELP [Sloanie], CAT29, TOP27, MSG:57/M530)


LEARNING TO PROGRAM   I want to learn to program my GS.  I want to learn 
"""""""""""""""""""   more than Applesoft BASIC.  

     What I want is something that is relatively easy to learn, relatively
inexpensive, and recomendations for "a goal" like a simple program that I
will have to write for myself, and is not in "the book".  I learn fast if
something is explained well, but I have no idea of what would be a
reasonable project to start with.  (knowing me I'd try to write AWGS all
over again).  Also, it would be nice to learn a language that will help me
on other platforms beside the GS if I ever move.

          (EW.CHRISTIAN [PIZZAMAN], CAT16, TOP9, MSG:2/M530)

>>>>>   Bryan said this:
"""""
 > Erick,

 > Get two things: Learn to Program Pascal -- study it, learn it, live it.
 > Then get "Toolbox Programming in Pascal" and become one with your GS.

 > If you don't want Pascal, there are also C versions, but Pascal is an
 > easier language to learn in my opinion.

I pretty much agree with this.  :)

--Matt
         (M.DEATHERAGE [A2Pro Leader], CAT16, TOP9, MSG:2\3/M530)

<<<<<   Quality Computers and Resource Central are two reputable mail 
"""""   order houses that carry our most popular products.  Each would 
probably be  happy to special order other products, too.  You can get
ORCA/Pascal or ORCA/C, along with our introductory programming course or
toolbox programming course, from either company.

Mike Westerfield

                  (BYTEWORKS, CAT16, TOP9, MSG:6/M530)


CHECKING GRAPHICS STATUS   A few weeks ago I was asking how to detect if 
""""""""""""""""""""""""   the double graphics mode is active on the GS.  I
knew that on the IIe location $C07F was somehow used for this.  But when I
experimented with this location, I didn't see any values being returned to
indicate the state of Annunciator 3 (This is what turns double mode
graphics on/off).  The Apple IIgs Firmware Reference shows on page 290 that
$C07F is part of the ROM interrupt code jump table.  This confused me.

     Until I got the Apple IIe Technical Reference Manual and the Apple
IIgs Hardware Reference.

     On the IIe, $C07F is obviously used.  However, I can't figure out how
it is used on the GS.  No matter what I do, it seems to always return $FF.
Fortunately, the GS has an alternate location for checking this.  The
INTFLAG byte ($C046) has a bit that holds the status of AN3 (bit 5).

     So I solved my problem and now my Screen Saver CDA fully supports the
double graphics mode.  The only thing I don't understand is why the GS
doesn't seem to support the IIe softswitch.  Strange.

             (B.WELLS5 [Brian], CAT12, TOP26, MSG:79/M530)

>>>>>   The IIe generally doesn't have multiple programs running at once 
"""""   (each application owns the entire memory space), so being able to 
check graphics modes isn't that important since the application should
know what it's done.

     So the IIgs has a real way to look at these things, and the IIe has 
a different way.

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT12, TOP26, MSG:81/M530)


WAITUNTIL AND TIMING   Passing 960 as the delayAmount for the WaitUntil 
""""""""""""""""""""   call should pause the GS for 1 second.  Can I 
rely on that fact regardless of the acceleration?

     I would need a similar thing:  I want to run a subroutine for a fixed
amount of time (1/2 sec) and this must be independent from the processor
speed.  How can I accomplish this. Is there a system info somewhere that
shows "real time" not processor relative time?  And it should be accurate
for 1/2 sec.

            (A.CORRIERI [Alex], CAT15, TOP3, MSG:21/M530)

>>>>>   WaitUntil was specifically created so that it wouldn't be 
"""""   accelerator dependent.  It uses the 60hz (50 in europe) interrupt
in the IIgs to keep time - - this same facility is used by the tool call
GetTick() which returns a "number of video scans since the system was
booted" count, i.e. real time.

Todd Whitesel

          (A2PRO.TODDPW [growf?], CAT15, TOP3, MSG:22/M530)

<<<<<   >>> A.CORRIERI [Alex]
"""""
        > Can I relay on that fact regardless of the acceleration?

     No, but you can rely on it pausing for at _least_ one second.  The 
only timing stuff available is the real-time clock and the timed
interrupts, and WaitUntil uses the 60 Hz interrupt to time things on. 
(The finer 1/16-tick resolution is not implemented.)

     If interrupts are disabled, your delays may be longer than 
intended. There's no way around this without external timing hardware.

        >>> A2PRO.TODDPW

        > It uses the 60hz (50 in europe) interrupt in the IIgs to keep 
        > time

     Last time I checked, the 60hz interrupt is 60hz throughout the 
world.  It just doesn't coincide with VBL in Europe.  We did investigate
it, and I remember being surprised but this was the result.

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT15, TOP3, MSG:23/M530)

>>>>>   Actually, no, you can't rely on WaitUntil.  If someone has set 
"""""   their WaitUntil scaling (in the battery ram) to a non-default 
value then waituntil will not behave the way you want it to. If you
really want to wait one second, just drop into a GetTick() loop and
watch for 60 ticks to go by or so.  :-)

               (JWANKERL [Joe], CAT15, TOP3, MSG:29/M530)


UNIDISK OR APPLE 3.5?   Is there any way to reliably determine whether or
"""""""""""""""""""""   not a 3.5" drive is a UniDisk or a "normal" 3.5"
drive?

     Both return device IDs of 3. SuperDrives aren't so bad, they return
something else ($1e? MFM-encoded floppy) so they are not an issue.

     BTW: this question could be extended: is there any reasonable way to
determine the manufactorer of a device?  AE for their floppies, Vulcans
etc, AI for the inner drive, flopticals, etc, etc?!?

     I realize there is not a GS/OS call to do this, but it'd be nice if we
could figure out some "tricks" to identify each device.

          (SOFTDISK.INC [Bryan Zak], CAT8, TOP5, MSG:91/M530)

<<<<<   I've barely scratched the surface of the Device Driver docs, 
"""""   so this may be of questionable "legality", but here goes....

     Pages 113 and 120 of the device driver manual are pertinent to this,
see the GetFormatOptions subcall for the DStatus call.  Part of the
information returned by this call is presented below (hopefully my
formatting survives, unique items are marked with asterisks. (try a
monospaced font:))

                Apple 3.5                     UniDisk 3.5
 StatListLen    $0000 0038                    $0000 0018     *
 OptsInList     $0003                         $0001          *
 Opts2Disp      $0003                         $0001          *
 Default        $0001                         $0001
 Current        $0000                         $0001          *

 Opt1           $0001                         $0001
 OptLnk         $0000                         $0000
 AplFmt/K       $0004                         $0004
 BlkCnt         $0000 0640                    $0000 0640
 BlkSiz         $0200                         $0200
 ILeav          $0002                         $0004          *
 MedSiz         $0320                         $0320

     What I'd bet, is that one could issue a GetFormatOptions call if a
3.5" drive had been found (by other code that is common knowledge).  Upon
an error free return from this call, if the StatListLen = $0000 0018 and
the ILeav = $0004 it would, with a fair degree of certanty, indicate the
presence of a UniDisk style drive, whereas any other values would note that
the drive was not a UniDisk.

     Like I said, I'm _no_ expert in this area, but I suspect that this
would be an acceptable way of "nailing" a UniDisk drive as it uses only
documented GS/OS calls and no "FTA style" hardware snooping.  I'm unaware
of any 3'rd party UniDisk style drives (or drivers) but if they exist there
_might_ be some ambiguity introduced.  Also if the UniDisk3.5 driver from
Apple wasn't installed, this would not find a UniDisk (but that's an
illegal configuration if a UniDisk is connected)

     The same concept _may_ be applicable to other type of drives, but I
haven't researched that as of yet.

     I invite critique on this method.

              (H.HISLOP [Harold], CAT8, TOP5, MSG:92/M530)

>>>>>   Unfortunately, this method is hoping that all devices use 
"""""   different drivers.  They do not.  For example, all those AMR 
3.5" drives out there "pretend" to be Apple 3.5" drives (but not
perfectly), so they'd all show up as Apple 3.5 Drives under this scheme.
A driver for some other 3.5" card that doesn't have any formatting
options would be "unknown" by this method.

     I don't like this, but it's the truth:  There simply is no way to
identify individual devices at a finer granularity than device type.  Once
you get to "3.5-inch drive," you can't get any further.  I tried for
_years_ to get the GS/OS team to add a new status call that returns a
device-name string, and all I ever got back was "Why would you want to do
that?"

     Then, of course, they needed to do it themselves in Archiver so they
could make device-specific calls to the Apple tape backup unit -- they
found that using the generic "SCSI Tape Backup" ID didn't confirm that the
device would accept their device-specific calls.  I thought I'd finally won
the battle -- but no, they cheated.  They allocated a _new_ device ID ($20,
"Apple SCSI Tape Driver").  Never mind that no one else gets to do this, or
that they could have just as easily defined a solution that worked for
everyone.

     Sorry, but this subject really tees me off that folks wouldn't add
five lines of code to return a string pointer in a buffer when dozens of
developers asked for it.  Normally they were very responsive to developer
needs, but they just fell flat on their faces on this issue.

--Matt
 
         (M.DEATHERAGE [A2Pro Leader], CAT8, TOP5, MSG:93/M530)


USING USER TOOLS   I am trying to find out if Apple registers user tools
""""""""""""""""   for the IIGS.  If they assign tool numbers.  I've
written the developer support center and gotten a letter back about
Macintosh Creator and File Type Registration.  It didn't answer my question
at all.  I called the developer support center.  The person that answered
the phone didn't know if Apple registed user tools.  He didn't even know
anyone who was doing Apple II tech support.  He suggested I contact
Resource Central.  I called Resource Central and they didn't know if Apple
registered user tools.  I have a hard time finding anyone that knows
anything about Apple II support.

              (C.JUNIEL [Clayburn], CAT15, TOP1, MSG:74/M530)

<<<<<   Apple does not and will not assign user tool numbers for the 
"""""   IIgs for one simple reason -- there aren't enough for everyone 
to have one.

     Apple IIgs Technical Note #73 talks about writing your user tool set
so that it doesn't depend on the tool number -- the application should be
able to install the user tool set as any user tool number it wants, and the
tool can figure it out (if it needs to know) from the function number it's
passed when it's first called.

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT15, TOP1, MSG:75/M530)


TRUETYPE FONT CONFLICTS   I have run into some problems with some Mac
"""""""""""""""""""""""   TrueType fonts I aquired.  The font ID numbers
conflict with each other.  I had to go in to each file and edit the font
number with a disk editor.

     Afterward I thought it would be a good idea to make a program to do
this.  However, I can find no information on the format of TT font files.
Does anyone have any idea how I can get the font number from a TT font (it
can be done, Pointless does it, but doesn't allow you to change the font ID
number).

     Any help would be appreciated.

               (J.HANNUM [JAMES], CAT11, TOP15, MSG:14/M530)

<<<<<   Bryan said this in Category 1:
"""""

  >>> SOFTDISK.INC [Bryan Zak]

  > TrueType fonts are documented in a document available from APDA (I
  > believe it's $25 or $30). APDA's number is 1-800-272-APDA.

     This is true, in fact, but it won't help.  TrueType font IDs in the
current Macintosh world and in Pointless are the resource IDs of the 'FOND'
resources that describe the font families.  You'd need to get Macintosh
resource information to read or change it, and it means mucking directly
with the resource map on a IIgs (a slightly dangerous proposition).

     The format of resource forks is publicly available in "Inside
Macnitosh: More Toolbox Essentials" which has _just_ hit the stores.  (It
was previously in Inside Macintosh Volume I.)

     Note that if you go changing TrueType font IDs, you must _not_
distribute those fonts to other people where they might wind up back on a
Macintosh unless you follow all the rules for Macintosh font family
numbering, which include specific ID ranges tied to specific international
script systems. There are more fonts than there are available IDs on the
Macintosh -- there _will_ be conflicts.  Trying to resolve them on more
than a system-by-system basis is a losing proposition.  There is a range of
the Macintosh font IDs allocated just for resolving system-specific
conflicts, so if you used that range for Roman-only fonts, you should be
safe.

     However, that discussion is outside of A2Pro's domain.  Further
information on how Macintosh font and script systems work belongs in
MacPro, the Macintosh Programmer's and Developers RoundTable on page 480.

--Matt

        (M.DEATHERAGE [A2Pro Leader], CAT11, TOP15, MSG:15/M530)

>>>>>   I uploaded a set of AWGS and TXT files that detail the format
"""""   of the Mac resource fork.   I think it was called RES.AWGS.BXY and
RES.TXT.BXY.  Search for files uploaded by K.FLYNN (there shouldn't be TOO
many of them [grin]).

             (K.FLYNN [ Chris ], CAT11, TOP15, MSG:16/M530)


IMPLEMENTING A WINDOWS MENU   I've used a windows menu in several of my
"""""""""""""""""""""""""""   programs and implemented it like this:

     In the "open window" procedure, besides calling NewWindow2, I also
create a menu item by calling InsertMItem2.  The menu item ID of is
determined by incrementing a global variable called wndwMnuID.  The menu
item ID is stored within a record whose pointer is placed within the new
window's refcon.

     When the program detects a menu item selection and can't match the ID
with an application menu item, it cycles through the windows on the desktop
looking for the correct ID in the refcon record.  If it is found, that
window is brought to the front; if not, the selection is ignored...

     I'm satisfied with this procedure in everything EXCEPT the way a menu
item ID is assigned.  I begin wndwMnuID at a # like 400.  When assigning
the ID, I check that it is not over, say 800.  If it is, I return wndwMnuID
to 400.  This seems rather crude and not a "good" way to do it!  If menu
items had a refCon field, things would be peachy...  but that
implementation would _probably_ only be good for Windows_menu menu items
and thus take up unnecessary memory.

     Anyway, does anyone have suggestions for a _better_ way to do a
Windows menu?  How does the Finder do it for that matter?

Rick
 
               (R.ADAMS48, CAT15, TOP15, MSG:43/M530)

>>>>>   Rick, there's nothing at all wrong with the way you do things.
"""""   Menus don't have refcons largely because the entire ID space above
about 256 is totally controlled by the application.  It's unlikely you'll
ever have more than 400 windows open at once (you do decrement the global
variable when a window closes, right?), so you should be set.

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT15, TOP15, MSG:44/M530)

<<<<<   I agree with you, but that doesn't really solve my problem... 
"""""   decrementing the global variable won't "work" either.  For example,
say I have but 2 windows open: the first has the menu item ID (in the
Windows menu) of 400, the second 401.  If I close the second (401) and
decrement the global variable, the next window I open will have the same
menu item ID as the first window.  That leads to the problem of someone
opening a window and leaving it open through 400 windows (unlikely, but
possible :).  When the 401 window is opened, the procedure sees the global
variable at 801, changes it to 400, and we again have 2 windows open with
the same ID...

     Just thought I'd get everyones ideas since I sometimes don't always
think up the best or shortest ways of doing things!  :)

Rick

                  (R.ADAMS48, CAT15, TOP15, MSG:45/M530)

>>>>>   Yeah, I see how that could happen...  i.e. if you have three 
"""""   windows open, and close the second, then open another one, the new
one would have the same ID as the third one...

     Maybe you could just keep a list of the IDs that are in use (keep it
in numerical order) and any time a new window is opened, scan the list for
the first gap in the ID numbers and use that one.  It would take a little
more work than what you're doing (not much more though) but it would solve
the problem.

                  (JUST.DAVE, CAT15, TOP15, MSG:46/M530)

<<<<<   In my programs I don't keep a list of ID's, but, I check for 
"""""   special circumstances.  For example, when all windows are closed-
reset the counter.  It is even less likely that a user will open up 400
windows, then 400 more without closing the first 400, right?  Keeping a
list wastes the list's memory use, although that is very small.  This topic
is in some ways kind of funny, but in another sense its important because
programmers must always guard for the "crazy" user who does the unexpected.
BTW, I have opened up 100 windows on my GS. The last 20 or so get
created/drawn mucho slow so it is probably a safe bet so assume that no
user will open more than 400 windows at one time.  However, if you do not
reset your counter to zero when all windows are closed, it is possible a
user will open 1 window, close it, open another, close it, and repeat this
process 400 times before quitting your program!

Bill 

                   (W.TUDOR, CAT15, TOP15, MSG:47/M530)
         
         
         
                            >>> HOT TOPICS <<<
                            """"""""""""""""""

MYTHS FABLES AND SHASTON 7   If a program specifies the font Shaston, 
""""""""""""""""""""""""""   size 7 point, you wind up with characters the
exact same size as Shaston 8, but the characters are printed closer
together.  Perhaps "non-proportionality" isn't the right word; now that I
think about it, I think "Shaston 7" is still proportional, but just doesn't
take up as much space horizontally.

     I find it useful for putting lots of text in narrow spaces.  In fact,
I think it's nicer-looking than standard Shaston 8 (I once tried to rig my
system to use Shaston 7 as the system font... with no luck, but I felt like
giving it a shot :).

 -- Eric S.
    (aka Sheppy)

              (E.SHEPHERD [Sheppy], CAT15, TOP4, MSG:84/M530)

<<<<<   When you request any font size that's not installed, it is
"""""   algorithmically created from one that does exist.  For a one-point
size difference, most of the dropout in the scaling comes from the
right-side bearing, but that's just how it works.

     (In fact, I've seen Shaston 7 used extensively due to an accident, and
it looks a little weird because the algorithm does strange things, just as
it does to most non-integral multiple of an existing point size.)

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT15, TOP4, MSG:85/M530)

>>>>>   Greg (and thus probably Eric) seem to think there is special 
"""""   support in the system for Shaston 7.  That when QuickDraw (or
possibly the Font Manager) encounter it it just uses Shaston 8 but a
charExtra of -1.

     True?  False?

           (SOFTDISK.INC [Bryan Zak], CAT15, TOP4, MSG:86/M530)


<<<<<   I have not examined the source to verify this, but to my 
"""""   knowledge, it's false.

     At one time, HyperCard IIgs was using Shaston 7 exclusively because
Andy Stadler mistakenly believed the "size" field in a fontID record was
zero-based instead of one-based, and it was not simply Shaston 8 with a
pixel removed between the characters.  It was irregularly spaced.

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT15, TOP4, MSG:87/M530)

>>>>>   Nope, there is no specific Shaston 7 support.  It just looks mostly
"""""   correct due to the quirky way in which the Font Manager's bitmap
scaler works (as Matt has already mentioned).  If you want to be assured
that you're getting nicely scrunched text, use Shaston 8 with charExtra
(and/or spaceExtra) set to -1.0.

              (MURPH [jim@apple], CAT15, TOP4, MSG:89/M530)



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

     There is a difference between the remainder from an integer division
and the mathematical modulus.  As it turns out, they are the same value
when both arguments are positive, which is why you see people call an
integer remainder a modulus.

     One cool way to think of the mathematical modulus is to think of it
like a clock.  Let's assume we're using a standard 12 hour clock, but the
clock face was created by a programmer, so 12 o'clock is labeled 0.  This
works for taking a number mod 12, as in:

    x mod 12        {Pascal}
    x % 12          {C}

     Now, if x is a positive number, x mod 12 means to count around the
clock x hours, and read off the result.  So 15 mod 12 is 3, which also
happens to be the remainder from an integer division.  For negative
arguments, though, you still start at 0 but count off the hours
counterclockwise,  so -1 mod 12 is 11.

     A number line works pretty well for this, too, and shows the
continuous nature of the result.

     The difference between a modulus and an integer division pops up for
negative arguments.  In that case, Remainder(-1, 12) is not 11, like in a
modulus.  Instead, it's 1 or -1, depending on how your computer (or
language) does business.

     One other interesting note:  The remainder of an integer division is
just as well defined when the denominator is negative as when the numerator
is negative, so Remainder(1, -12) and Remainder (-1, -12) both make sense,
although you can define the sign of the result any way you like.  For the
modulus operation, the second argument must be greater than 0.  In Pascal,
for example, 4 mod -2 is illegal, and if you have range checking turned on,
ORCA/Pascal will flag an error.

     Different languages have handled mod different ways.  In Pascal, from
day one, mod is a true modulus.  On the other hand, Jensen (of Jensen&Wirth
fame) goofed in the original Pascal report!  The manual part, though, got
it right.  Still, many Pascal compilers implement mod as an integer
division, and don't bother to state that this is an exception to the ISO
standard, the ANSI standard, and Jensen&Wirth.

     In C, things are just as mucked up.  My favorite C manual is Harbison
& Steele.  They state that % is implemented a lot of different ways, and
that in portable C programs, you should not count on any particular result
from % if either argument is negative.  All in all, not bad advice for any
language, except perhaps Ada.

     In ORCA/C and ORCA/Pascal, % and mod are the true mathematical modulus
operation.  You can count on it staying that way for Pascal.  For C,
though, I have an open bug report from a person who says I got it wrong.
They claim that ANSI C specifies % as an integer remainder, not a
mathematical modulus.  I haven't finished verifying this, but based on a
quick look, I think he's right.  As a result, the value you get from ORCA/C
for -3 % 7, say, may change between versions 2.0.1 and 2.0.2.

     And that's the way it was, 2 Dec '93.  :) 

Mike Westerfield

                 (BYTEWORKS, CAT36, TOP11, MSG88/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

     30        PROCYON, INC.
     31        SOFTDISK PUBLISHING
     32        MORGAN DAVIS GROUP (MDG)
     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 PROCYON INC. <<<
                      """"""""""""""""""""""""""""""

SPLAT! DEBUGGER SHIPS   Writing software in a high level language for the
"""""""""""""""""""""   Apple IIGS has always been something of an
adventure.  Bugs are hard to track down because GSBug is ill-suited to high
level langauges (which variable does the number $05 represent?), and
"print-statement" debugging is slow and tedious.  So, if your program had
bugs, you had to fix them the hard way.  Until now.

     Introducing: Splat!, the debugging tool you've been dreaming of!
Splat! is a "source-level" debugger, meaning that when you step and trace
through your code you see the program lines just as they are in your source
code.  Variables are displayed in their own window and program output is
captured in yet another window! Splat! utilizes a text-based interface that
works a lot like the standard IIGS desktop interface; this gives you the
speed and flexibility of text with the ease-of-use of the desktop.  Splat!
is packed with powerful features to help you track down and squash those
nasty bugs.

   o  Supports the ORCA debugging standard, so it works with all the 
      ORCA languages, present and future, including C 2.0 and Pascal 2.0.

   o  Support for structures and arrays; expand them to view individual
      elements and fields, and modify them.  Follow linked lists with the 
      touch of a key!

   o  Profiling allows you to find the slowest subroutines easily and
      concentrate on optimizing only where necessary.

   o  Splat! works in the GNO/ME and ORCA shells, and also outside them. 
      You can use Splat! to debug Desk Accessories, INITs and CDEVs as 
      easily as applications - you're not limited by the debugger's 
      environment.

   o  Breakpoints and "Auto-Go" regions help you move quickly to the part 
      of your program that is malfunctioning.

   o  Unique "template" feature lets Splat! intelligently display 
      structures even with older versions of the ORCA langauges.  Splat! 
      uses the GSBug template standard, which means the most common ToolBox 
      data structures are pre-defined for you.

     You may be thinking "This all sounds neat but I'm just beginning to
learn how to program; I'm not a professional programmer".  If so, think
again: Splat! will help you learn to program in record time, because it
will help you find those "beginner's bugs" that everyone (yes, even us!)
found so frustrating.  Splat! helps beginners understand how their code
works because they can see if work, step by step, right in front of them!

     Splat! is available right now at a bargain-basement Introductory
price of just _$39.95_.  Compare this to the $100's similar debuggers on
other computers can cost!  But don't delay, because this special offer
expires on February 15, 1994.

     To take advantage of this special offer, simply send a check or money
order for $39.95 ($44.95 for overseas orders to cover shipping) to:

  Procyon Enterprises, Inc.
  PO Box 620334
  Littleton, CO 80162-0334
  USA

     (We regret that we cannot currently accept credit purchases)

     Do you already own ORCA/Debugger?  If so, then you can take advantage
of our special competitive upgrade offer: Just send $24.95 ($29.95
overseas) and your original ORCA/Debugger disk and get the new features you
want: _now_.  (Your disk will be returned to you with your offer).

     For more information, you can contact Procyon through any of the
following email addresses:  America OnLine: GNO Jawaid GEnie: PROCYON.INC
Delphi:  JAWAIDB Internet: bazyar@cs.uiuc.edu

 
 Splat! Feature List:

   o  Works with ORCA/C 2.0, ORCA/Pascal 2.0, and any other languages 
      that support the ORCA debugging standard.

   o  Intelligent handling of structures and arrays, even if your 
      compiler does not directly support them

   o  Subroutine profiling accurate to 1/7860 of a second

   o  Not environment dependent; works in programming shells such as 
      GNO/ME, but equally well in the Finder - debug your code where 
      it's most convenient

   o  Full debug-time control : breakpoints, auto-go regions, step 
      into/over subroutines, step/trace, run at full speed, halt 
      execution

   o  Comes in two versions: Init and Shell Command.  The Init version 
      pops up whenever a program with debug codes is run; the Shell Command 
      version runs only when you specifically want it to (and saves valuable 
      main memory).

   o  Configurable screen display - choose between Source/Variables/Output,
      Source/Double-wide Variables, and Source/Local Variables/Global
      Variables
      (some languages do not support the separate Local/Global display).  
      Tab spacing for the Source window is also configurable.  The Source 
      window is always 80 characters wide, helping you see more of your 
      source code at once.

   o  "View source or text file" feature lets you cross-reference without
      leaving your current debugging session

   o  View the subroutine call stack - see how your program got into the
      current function, and what source files the callers are in

   o  Ability to manipulate the values of simple variables and complex data
      structures

   o  "Address of next line" feature helps you use Splat! with such popular
      tools as GSBug and NiftyList

   o  Written in machine langauge for the highest possible speed

     GSBug is a trademark of Apple Computer, Inc. ORCA/C, ORCA/Pascal and
ORCA/Debugger are trademarks of The Byteworks, Inc.

                 (PROCYON.INC, CAT30, TOP9, MSG1/M530)


USING MORE WITHIN PROGRAMS   I've been working away on my Star Trek game
""""""""""""""""""""""""""   and teaching myself C at the same time.  
I wrote a routine that displays text files to the screen (to print the
instructions for the game), including pausing at the end of the screen.
That, of course, is very similar to "more".  Is there a way to pass a
filename/pathname to "more" from within a program and then return back
to the program?  If so, can you provide some example C code?

     Thanks,

         Michael (still loving GNO!)

            (M.POTTER4 [AppleNET Pro], CAT30, TOP3, MSG87/M530)

<<<<<   Sure!
"""""

 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 int morefile(char *filename)
 {
 char *cmdline;
 int result;
     /* allocate memory for cmd line */
     cmdline = malloc(6+strlen(filename));
     /* create the command line */
     sprintf(cmdline,"more %s",filename);
     /* execute the command line */
     result = system(cmdline);
     /* dispose the memory */
     free(cmdline);
     return(result);
 }

     Basically, the core of this routine is the "system()" library routine,
which takes a C string as input, and has the shell execute that string
as if you'd typed the command at the shell's prompt.  The other stuff is
just C-junk to allow an input filename of arbitrary length.

I hope this does it for you!

 Jawaid

                 (PROCYON.INC, CAT30, TOP3, MSG88/M530)


GNO PTY USE   I've been experimenting with PTY's and I have some 
"""""""""""   questions (and some other subjects too).

     1)  I've written a piece of code which will open a .ptyq0 and a .ttyq0
         and run login on it.  I can then copycat over to it and all works
         normally ... until ...  I attempt to open another one.

     What is the proper protocal to open a PTY and know if its already in
use? There is no error generated.  When I run my application and then use
Finder and TMTerm I crash (lock up) because we both try to use the same
one.

     Just to clarify, I want to be able to determine if a PTY has been
previously opened, not really if an application is running on it.

     2)  Is there an approved way to tap into the GNO/ME keyboard scan
         routine so that my application can watch for a certain key 
         sequence (no matter what other application is running) and if 
         it is for me (ie. Option Keypad) grab it and switch another 
         terminal to the current STDIN (& etc)?  A practical application 
         for console switching.

     3)   This may have been asked previously but ...
          Is the GNO/ME device driver format documented any where?  Is it
          the same as GS/OS and are the requirements the same.  By this I
          mean the format and requirements for PRINTER and MODEM type 
          DRVs.

     4)   I also believe I saw this somewhere else but I couldn't find it
          when I needed it ...

          If I crash into the monitor in GNO/ME what is the address to
          execute to re-start/re-connect 'things'?  This may seem a 
          strange request BUT I'm sure I saw it some where.

     Thanks in advance for any light you can shed.

               (D.MITTON [Doug], CAT30, TOP2, MSG59/M530)

<<<<<   Trying to open a PTY that is already open should result in an 
"""""   error (check for -1 coming back from open, or NULL from fopen).  
So, basically you just try opening ptyq0; if that fails, try ptyq1; keep
going (up to the max of ptyqf).

 > A practical application for console switching.

     Something like this would have to be added directly into the kernel
(i.e., there's currently no way to install "hotkeys" that a process act
on).  At the moment, the bank 0 limitation has kept us from adding
console switching into the system, but we hope to fix this limitation.

 > Is the GNO/ME device driver format documented any where?

     No, and they're nothing at all like GS/OS drivers.  If there is a
particular device you want support for, let me know (a lot of folks want
Super Serial Card drivers, and this will probably be the next one I do).

 > If I crash into the monitor in GNO/ME what is the address to execute 
 > to re-start/re-connect 'things'?

     There's no vector like that, but very often you can use ^C (or the 
GNO Snooper) to kill the monitor process and return to the shell.  We
recommend a reboot shortly after this, but it can be useful when trying
to find bugs.

 Jawaid

                 (PROCYON.INC, CAT30, TOP2, MSG60/M530)


GNO DRIVER DOCUMENTATION   Are there any sort of detailed 
""""""""""""""""""""""""   documentation on your printer and modem drivers
that come with GNO?  As I become more comfortable with C, I'd like to work
on some communications software.  This should be made easier because I've
seen quite a few books on serial communications using C.

     I checked all my folders on my HD and didn't see the yankit man page.  
I saw the list of missing man pages on the internet topic and am looking
forward to all of them eventually showing up.  I know that I'll be
writing a man page for my star trek game <grin>.

     Michael (who's now awaiting splat)

           (M.POTTER4 [AppleNET Pro], CAT30, TOP1, MSG37/M530)

<<<<<   Yes.. the manpage in particular you want to read is TTY(4). 
"""""   It describes the various device control calls you'll be using.  
Otherwise, you just:

   fd = open(".ttya",O_RDRW);
   read(fd...)
   write(fd...)
   close(fd)

   As you can see, it's very very easy to use GNO's device drivers :)

Jawaid

                (PROCYON.INC, CAT30, TOP1, MSG38/M530)


GNO SPOOLING AND APPLETALK   Is there any current way to support 
""""""""""""""""""""""""""   printing to an AppleTalk ImageWriter II
from GNO?  Supporting the print-spooling feature would be great as well!

     I'm in a bit of a quandry right now - I like the print-spooling
capabilities of GNO when hooked up to a serial printer, but I want to
network my GS and Mac for file-sharing (and yes I do have an AppleTalk card
for the printer already).  And I don't have enough slots available to
consider using an SSC for the IWII.

              (A.BELYEA [Allan], CAT30, TOP2, MSG49/M530)

>>>>>   If GNO supports GS/OS devices as I believe it does, you should 
"""""   be able to print to the .RPM device while networked and have 
everything work just fine.  (RPM == Remote Print Manager)

--Matt

         (M.DEATHERAGE [A2Pro Leader], CAT30, TOP2, MSG50/M530)

<<<<<   Matt's right.  It should work, but there's currently no way 
"""""   to tell the print spooler to use .RPM.  This will surely be 
changing in the future :)

 Jawaid

                (PROCYON.INC, CAT30, TOP2, MSG52/M530)


PIPES GNO AND ARCHIVERS   Under Unix when FTPing, is it possible to do 
"""""""""""""""""""""""   something like:

     get labels-ps.tgz|gunzip|tar xfv

     If so, would it also be possible under GNO (after the IP stuff 
comes out)?

              (D.BROWN109 [Dan], CAT30, TOP2, MSG55/M530)

>>>>>   I assume so, since we'll likely be porting the BSD Unix FTP 
"""""   program directly.  Obviously we don't have gunzip, and GNO's 
tar doesn't accept standard input yet, but we can fix that for ya :)

 Jawaid

                 (PROCYON.INC, CAT30, TOP2, MSG56/M530)

<<<<<   You're porting gunzip?  Cool!  (-:  How about this:
"""""
        rz|sscii (or descii)|tee file.bxy|yankit xv

     I tried the sscii file.bsq|yankit xv, and yankit returned a 
usage message.  Does this mean it doesn't like pipes either?

              (D.BROWN109 [Dan], CAT30, TOP2, MSG57/M530)

>>>>>   No, yankit does work with pipes, you just have to give it 
"""""   a filename which indicates a pipe:

         sscii file.bsq|yankit xv -

     However, I don't believe sscii will output to standard output.
Perhaps the descii utility could be modified to do this? (it's a lot faster
than sscii anyway).

     One final note: yankit's pipe feature is kinda slow because Andy uses
a TextTools call to read data from the pipe, instead of a GS/OS Read call.
He's needed a good reason to do this, and hopefully he's watching now that
someone really wants to do it :)

 Jawaid

                 (PROCYON.INC, CAT30, TOP2, MSG58/M530)

<<<<<   Dan, in some sense it's not really safe to pipe anything out 
"""""   of a binscii decoder, because of the way binscii works.  At its 
heart, binscii is a fairly unintelligent engine that decodes a segment,
opens the filename it belongs to, sets the file mark, and writes it.
This is fundamentally incompatible with pipes except when the input to
sscii is perfectly ordered and only contains one file.  The kind of input
binscii decoders are designed to handle has multiple files mixed
together with their parts in any convenient order, and converting that
to something that can be piped to another process is a pretty obnoxious
problem.

Todd Whitesel

             (A2PRO.TODDPW [growf?], CAT30, TOP2, MSG63/M530)

>>>>>   OK, I understand that.  Would uudecode file.uu|uncompress 
"""""   theoretically be safe?

               (D.BROWN109 [Dan], CAT30, TOP2, MSG64/M530)

<<<<<   Yes, you can fully pipe uudecode because it always operates on 
"""""   single files.  (Which incidentally is why splitting uuencoded 
stuff into pieces is such a hassle -- it's not built into uuencode.)

Todd Whitesel

            (A2PRO.TODDPW [growf?], CAT30, TOP2, MSG65/M530)



                      >>> NEWS FROM GS+ MAGAZINE <<<
                      """"""""""""""""""""""""""""""

NOV/DEC GS+ MAILS   Well, we've mailed out the latest Nov/Dec GS+ 
"""""""""""""""""   already... things to look forward to in case you 
don't have yours yet are a program to let you get stuff off of CD-ROMs
which have volume names  containing spaces, a new MiscLib version, a
groovy game, and last but not least, a finder extension which will
extract files from ShrinkIt archives.

                 (JWANKERL [Joe], CAT33, TOP4, MSG45/M530)



                      >>> NEWS FROM PRODEV, INC. <<<
                      """"""""""""""""""""""""""""""

WORKING WITH THE DDT   I received DDT16 in the mail awhile ago and 
""""""""""""""""""""   have it installed in my GS.  I used the INIT 
to automatically initialize the DDT16 upon booting my computer.  I see
the screen briefly while it initializes and then my boot goes on its
merry way.

     I have one question that may sound very very lame  :)  After DDT16 is
initialized, how do I invoke it?  I know that there is a HOT key that does
something... like the default is <CONTROL-S> but it doesn't enter the DDT
debugging mode.  I read over the manual several times thinking that I
surely missed something but I don't think I did.

     Could you take me through a quick session?  Here's what I'd like to do:

     o  From the finder I run BASIC.SYSTEM.

     o  From there I launch my 8-bit program that I am working on.

     o  I want the the program to break on the first instruction so 
        that I can start stepping through the code in debug.

     o  Say I load the program at $6000, I'll have to set a breakpoint 
        at $01/6000 before launching the program right?  But how do I get 
        back to the DDT?  Do I have to enter the monitor and type Cn00G 
        every time?

              (R.NIELSON1 [Russ!], CAT35, TOP2, MSG10/M530)

>>>>>   The purpose of the DDT Init is to set up the 6522 VIA chip on the  
"""""   DDT and also to set the NMI vectore at $00/03FB in the IIGS to 
point to the DDT.  After the DDT is initialized it will trap any break
(BRK) instruction that occurs and pressing the button on the DDT cable
will generate a Non Maskable Interrupt (NMI) that is also trapped by the
DDT.

     When I am debugging GSOS applications I just put a BRK instruction 
in the code where I want to interrupt it.  When I assemble and run the
app. the DDT will take control at the spot of the BRK.  I then press the
down arrow key to skip over the BRK instruction and then begin tracing
the code with the DDT.

     For 8 bit applications I generally know the address the application 
will load to so I load the app., start up the DDT, then put the program
counter at the start of the app. and start tracing, or put breakpoints
in the code and start the app. running.

     Be careful when you are debugging 8 bit app's. ProDOS 8 over writes 
the NMI vector at $00/03FB which prevents the DDT from trapping breaks or
interrupts.  You need to restart the DDT after running ProDOS 8.  The
simplest way to do this is wby writing a little program that does a JSR
$Cn04 where "n" is the slot number of the DDT.  The DDT will initialize
the NMI vectors at $00/03FB and return to you with an "RTS".  Make sure
the IIGS is in emulation mode when you do the JSR.  You might also add
the code to the start of your app. so that it initializes the DDT each
time you start it up.  Another option would be to modify  ProDOS 8 so
that it did not overwrite the NMI vector.

     One more option is to use the GS's built in "Visit Monitor" CDA to 
start the DDT after running your application program.  This is explained
in the DDT manual in the DOs and DON'Ts section, 2nd page from the last.

     Last but not least, your idea of a hot-key sequence to get into the  
DDT is a good one.  Or a CDA that does a DDT Init.  I am so busy right
now I doubt if I will get much of a chance to work on these items. 
Perhaps someone else will contribute to a worthy cause.

I know this was a wordy answer, I thought someone else might benefit from
it.
 
                (PRODEV [Chuck], CAT35, TOP2, MSG11/M530)



                     >>> NEWS FROM THE BYTE WORKS <<<
                     """"""""""""""""""""""""""""""""

ORDERING BYTE WORKS PRODUCTS   Many of our products are carried by major 
""""""""""""""""""""""""""""   mail-order houses like Quality Computers 
and Resource Central.  Their prices are frequently far below retail, so
unless we are doing a special promotion, like the introductory offers
for ORCA/Modula-2, Programmer's Reference for System 6.0.1 and the
upgrade for ORCA/Debugger (all from December 1993), you should look to
these major distributors first to get the best price.

     For upgrades, special introductory offers, and lower volume products 
that these dirstibutors don't carry, you'll want to order directly from
the Byte Works.  You can order several ways:

Online:  Send the following to my address by e-mail.  I will send back a
short note as soon as I read your order to let you know it has been
received.

   Name
   UPS Mailing Address
   VISA or MC Card Number & Expiration Date
   What you are ordering.
   What you expect to pay, with shipping.

Phone:  Call us at (505) 898-8183.  We can take credit card orders over
the phone.

Mail:  Send the same information or a personal check instead of the
credit card information to:

   Byte Works, Inc.
   4700 Irving Blvd NW, Suite 207
   Albuquerque, NM  87114

                  (BYTEWORKS, CAT36, TOP1, MSG3/M530)


PROGRAMMERS REFERENCE FOR 6.0.1 SHIPS   It's here!  Programmer's Reference  
"""""""""""""""""""""""""""""""""""""   for System 6.0.1, the long awaited 
addendum to Programmer's Reference for System 6.0, is now final.  We're
printing them now, and will start shipping them early next week.

     This new addendum is 50 pages of documentation, telling you all about 
the changes Apple made in System 6.0.1.  This is the OFFICIAL REFERENCE
for programmers who want to use the new features in System 6.0.1.  This
is the documentation Apple will expect you to have to use System 6.0.1
features! You'll find out about:

     o   New tool calls, like AlertMessage (a quick and easy way to 
         display alerts).

     o   Correction of errors and clarifications to Programmer's Reference 
         for System 6.0 and Apple IIGS Toolbox Programming, volumes 1-3.

     o   Changes to GS/OS, including programmer documentation for the new 
         MS-DOS FST.

     o   Changes to the Sound Control Panel.

     o   New variables in the battery RAM.
 
     o   New features in Finder 6.0.1.

     Programmer's Reference for System 6.0.1 fits right into your current
notebook for Programmer's Reference for System 6.0.  Best of all, it's
just $10.

     If you don't have Programmer's Reference for System 6.0, now is the 
time to fill out your entire reference library.  Programmer's Reference
for System 6.0 is the official Apple documentation for all of the
changes to the Apple IIGS System disk from System 5.0.2 through System
6.0.  Its 468 pages tell you all about the new tool calls added in
System 6.0; describe changes to GS/OS that occurred after Addison Wesley
published "Apple IIGS GS/OS Reference;" and tell you all about the new
Finder.

     Order now, and you can get Programmer's Reference for System 6.0 
_and_ Programmer's Reference for System 6.0.1 for the old price of $45. 
Hurry, though:  On January 1st, 1994, the price for the combined
documentation goes up to $50.  If you order this month, you miss the
price hike and save $5!

     Shipping charges for Programmer's Reference for System 6.0.1 are 
free in the U.S.  Shipping charges for Programmer's Reference for System
6.0 and Programmer's Reference for System 6.0.1 are $5 in the U.S.  For
customers outside the U.S., please e-mail your location, and I'll get
back to you with the exact shipping charges.

                 (BYTEWORKS, CAT36, TOP25, MSG14/M530)


ORCA/DEBUGGER 1.1 SHIPS   It's here!  ORCA/Debugger 1.1 is the newest 
"""""""""""""""""""""""   version of our highly regarded debugger for 
the Apple IIGS.

     ORCA/Debugger is a source level debugger for ORCA/Pascal, ORCA/C,
ORCA/Integer BASIC and ORCA/Modula-2.  Unlike PRIZM, which comes with 
these languages, ORCA/Debugger is not restricted to a particular
environment.  It's an Init that sits in the background, ready for you
when you need it.  You can debu almost anything -- 320 mode desktop
programs,  other Inits, CDevs, and HyperStudio NBAs, for example.

     Once you pop into ORCA/Debugger, you see the actual source code from 
your program, not the machine code you get from machine language
debuggers like GSBug.  You can look at your variables using the same
names and formats you used in the program itself.  You can even change
the value of a variable while you run!

     ORCA/Debugger 1.1 now supports records, objects and pointers, too.  
If your program uses a Rect, for example, ORCA/Debugger shows you the
address of the record in memory, then automatically expands the record
to show you all of the fields, with no extra typing!  Here's what you
would see:

   myRect:       06/B544
    v1           10
    h1           10
    v2           100
    h2           20

     ORCA/Debugger 1.1 is shipping now.  If you have ORCA/Debugger 1.0 
or 1.0.1, you can get the new version of the debugger for just $10. 
(Overseas customers: Please add $3 for shipping and handling.)

     If you don't have ORCA/Debugger yet, rush to your nearest wallet and 
send us $30 plus shipping before 28 February 1994, and we'll send you the
most useful debugging tool available for high-level language Apple IIGS
programming.  ORCA/Debugger is normally $50, so you SAVE $20 from the 
retail price.  Shipping is $5 in the US; please write for overseas
shipping rates.

And if you order online before 31 December 1993, we'll give you FREE
SHIPPING in the U.S., and $5 off of shipping to any other location.

               (BYTEWORKS, CAT36, TOP29, MSG34/M530)


ORCA/MODULA-2 REFERENCES   Well, I said I'd do it :-).  Here is a listing 
""""""""""""""""""""""""   of all the books I have on Modula-2:

 Modula-2, A Seafarer's Manual & Shipyard Guide
 Edward J. Joyce
 Addison-Wesley, 1985
 ISBN 0-201-11587-5

 Programming in Modula-2 (Third, Corrected Edition)
 Niklaus Wirth
 Springer-Verlag, 1985
 ISBN 0-387-15078-1

 A Guide to Modula-2
 Kaare Christian
 Springer-Verlag, 1986
 ISBN 0-387-96242-5

 Advanced Modula-2
 Herbert Schildt
 Osborne/McGraw-Hill, 1987
 ISBN 0-07-881245-3

 Modula-2 Programming
 Ian Kaplan and Mike Miller
 Hayden, 1986
 ISBN 0-8104-6480-2

 Modula-2 Library Modules, A Programmer's Reference
 Robert D. Walker
 TAB Books, 1988
 ISBN 0-8306-2737-5

 Modula-2, A Software Development Approach
 Gary A. Ford & Richard S. Wiener
 Wiley, 1986
 ISBN 0-471-84443-8

 Modula-2 Wizard, A Programmer's Reference
 Wiley, 1986
 ISBN 0-471-84853-0

     The Joyce book is a bit "cutesy", but very well written and
informative for the beginning M2 programmer.  The Wirth book is necessary,
but about as much fun to read as the Clinton Health Plan.  Most of the
others have their various high points (which I don't really recall with any
degree of accuracy).  The two Wiener books are _outstanding_.  I was amused
to note that both of these mention "Includes Turbo Modula-2" on the cover!
Yes, Borland did have a CP/M hosted Modula-2 compiler.  They will not admit
it if you call them, but I own several copies.  It was a killer, and
despite it's ideosyncrasies generated incredibly fast, tight code.

     In 1988, I developed a control application hosted on an HD64180 CPU
(under a CP/M-like O/S) written in Turbo Modula-2.  It ran to about 5,000+
lines of source code, broken into 38 modules.  Properly written Modula-2 is
largely self-documenting, and I have little trouble diving in for changes -
even after not looking at it for over four years!  There is NO question in
my mind that M2 is the perfect language for development of embedded control
systems.  Alas, it seemed that the world had just passed it by..

     I am VERY curious as to how Orca/M2 will deal with the dependancy
issues. I would have been up the creek without a ported version of Unix
"make" and the file date-stamping capabilites of the Z-System environment.
A true M2 linker will barf on final pass if it detects an "out of sync"
situation _anywhere_ in the entire hierarchy.  It's far more fanatical than
any Pascal implementation.  My MS-DOS M2 environment (Topspeed M2) takes
care of this automatically in the IDE shell.  What does Orca do?  I HOPE
you aren't cheating on this facet..

     Tell me more!

     The Modula-2 construct that is generally used for interrupt-driven
task switching is IOTRANSFER.  I couldn't think of it during the RTC.  Is
this supported in Orca M2?  It's a standard part of M2, according to Wirth
3rd- Edition..

     Relative to dependancies, let's say that I have two implementation
modules "FOO.MOD" and "BAR.MOD".  Both of these import from definition
module "FOO.DEF".  Now, if I make a change to "FOO.DEF" in between the
compilation of "FOO.MOD" and "BAR.MOD", then try to link the whole program,
will I get an error?

     Turbo Modula-2 will abort link phase with a "Version Conflict" error
when the second of the two implementation modules is linked - recognizing
that they are out of sync. TopSpeed M2 will step back and force a
re-compile of "FOO.MOD", then re-try the link (as I recall).  At first,
this behavior seemed annoying - but actually is right in keeping with the
philosophy of Modula!  If the makeup of a RECORD type changed between
compilation of the two modules, and both relied upon this structure, you
would WANT the link to fail.  On large projects, with complex dependancies,
a "make" utility or smart IDE is almost essential, IMHO.  You haven't lived
until you've gotten a 30 module project so scrambled that it won't link for
love or money.  Before CP/M file-stamping and "make", I ended up working
out the dependancy tree on paper and tediously re- building the entire
thing manually - arrghh!

     What checking does Orca M2 perform to ensure that sync problems like
the one outlined above would be caught?

          (STEVE.HIRSCH [64180], CAT36, TOP13/17, MSG12/M530)

<<<<<   Steve, ORCA/Modula-2 does have IOTRANSFER.  It's a slightly 
"""""   non-standard implementation, so you can hook into an interrupt
handler, and Peter put a note in the documentation saying it wasn't a very
efficient mechanism for interrupt handling.  I'm not sure what all of the
implications are in those comments, but yes, the procedure exists.

     As for the syncrinization, there are two levels of checking.  The
first is at compile time, which is better, since the compiler can report
errors that make sense to Modula-2 programmers, while the linker is set up
for multiple languages.  If you IMPORT incorrectly, the compiler flags an
error.  The seonc occurs at link time, and is based on forcing errors in
the initialization procedure, whose name changes with each compile.  I'm
aware that these checks are in place, since I've had both flagged against
me.  :)  I have not fully explored all of the implications of the checks,
so I'm not sure if they are 100% airtight, as they should be in Modula-2.
I don't _know_ of any problems, you understand -- I just didn't personally
test to see if I could fool the compiler.  It's certainly caught me several
times, though.

Mike Westerfield
 
                 (BYTEWORKS, CAT36, TOP13, MSG19/M530)


A QUESTION CONCERNING THE USE OF OBJECTS   What if an overridden method 
""""""""""""""""""""""""""""""""""""""""   calls its inherited method and
while in that inherited method, a Dispose( self) call is made (like on an
error or something)?  Should I check after an inherited method call to make
sure that Self still exists before doing anything else with it?  Can I just

 inherited theMethod;

 If self <> NIL then
    begin

 Any better suggestions?

 Rick

                (R.ADAMS48, CAT36, TOP33, MSG6/M530)

>>>>>   I'm not sure that's a particularly good way to handle most 
"""""   errors.  When you code your objects, you need to be sure that no
reference is made to self, or to the object in any other way, after you
have used Dispose or Free.  Once that's done, the object is gone.  The
methods are still there, and will continue to function -- so you can back
out of the message gracefully -- but you really can't access anything, even
a flag, in the object once it has been disposed.

     Having said that, if you _try_ it, it may work.  If the memory for the
object hasn't been reused, and if you're accessing something beyond the
first 8 bytes (which ORCA's memory manager uses), things will look OK.
Don't let that lull you, though.  Just when you least suspect it, your
house of cards will tumble down.

     Basically, if a method can dispose of the object, the only safe thing
I can think of that also seems reasonable to me is to use a function
method, and have it return a boolean that tells you if the object  still
exists.  Better still, though, is not to reference the object in any way
after a call that might dispose of it.

Mike Westerfield

                (BYTEWORKS, CAT36, TOP33, MSG7/M530)


MEMORY AND ORCA/PASCAL   I am writing an ORCA/PASCAL version of the 
""""""""""""""""""""""   Hangman game, linked as a S16 program.  Below is a
segment of my program where I am having problems.  I have the array
"words", which is populated by reading in an ASCII "dictionary" of single
words. procedure DeleteDict is used to delete words from the array, by
first changing their value to 'XXX', copying the array elements to array
"newwords" (skipping the 'XXX' entries), and finally copying array newwords
back to array words.  I have shown the segment which copies newwords to
words.
 -----------------------------------------------------------------
 program Hangman (input, output);
 uses Common, QuickDrawII, EventMgr, MemoryMgr, msctoolset;
 var
    words: array[1..2000] of string[20];
 procedure DeleteDict;
 var
    newwords: array[1..2000] of string[20];
    j, k: integer;
    k := 0;
    for j := 1 to count do  {count is number of words read into the array}
        begin;
        if words[j] <> 'XXX' then
           begin;
           k := k + 1;
           newwords[k] := words[j];  <----- program crashes here
           end;
        end;

     When I test with a dictionary of just a few words, everything works.
But when I use a dictionary of several hundred words, the program crashes
during the above loop which moves words to newwords.  With a dictionary of
400 words, the crash occurs when j = 115.

     When I comment out the indicated line, the program does not crash.  I
originally though that perhaps the array size of 2000 is too large for
ORCA/P to handle, so I tried other sizes down to 500 elements, but the
program still crashes.  I found in the ORCA/P manual (p. 196) that ORCA/P
has a maximum single array size of 65536 bytes.  Is this the declared size
or the actual size of the populated array? In either case, assuming that
one element of the array in my program is 20 bytes long, I would never have
exceeded 65536.  Is there some other memory condition that I am violating
or can control from within the program, and could linking it as S16 cause
any special problems?

             (M.SAND1 [Mark], CAT36, TOP10, MSG95/M530)

<<<<<   Local variables in procedures are allocated on the stack.  You're 
"""""   trying to allocate 2000 * 20 = 40000 bytes on the stack.  That's
pretty much all the bank zero memory that's available.

     You should allocate your memory as a handle and set a pointer to the
array to point to the handle you allocate.

--Matt

          (M.DEATHERAGE [A2Pro Leader], CAT36, TOP10, MSG96/M530)


>>>>>   Actually, I would discourage allocating memory as a handle.  Handles 
"""""   are slow.  Every handle slows the system down just a bit, and after 
a while it adds up.

     In addition, when you go to access something in a handle, you have to
lock it, do a double pointer dereference, then unlock it.

     Handles aren't bad, but they should not be used indiscriminantly,
either. For your application, my first choice would be a global array,
since that can be accessed the quickest.  Second choice would be an array
allocated with Pascal's new function.  That still creates a new handle
internally, but you deal with it as a pointer, so there is a single
dereference to access the array, not the double dereference required by a
handle.

     Of course, opinions vary.  This is an opinion, not a hard-and-fast
rule. Your program will work either way.

Mike Westerfield

                  (BYTEWORKS, CAT36, TOP10, MSG97/M530)


<<<<<   > Actually, I would discourage allocating memory as a handle.  
"""""   > Handles are slow.  Every handle slows the system down just a 
        > bit, and after a while it adds up.

     Yeah, when you get to about one or two _thousand_ handles, sure.
Allocating one handle to hold a 40K array is _exactly_ what the IIgs memory
management scheme is for.

 > In addition, when you go to access something in a handle, you have to
 > lock it, do a double pointer dereference, then unlock it.

     This is completely incorrect.  You do _not_ have to lock a handle to
use it unless _your_ code does something which moves memory, like calling a
system routine.  And even then, all you need to do is dereference it again
if it moves.  The system software absolutely, positively will not move
memory behind your back.  (Any other software which might is buggy.)

     Allocating a handle to hold an array that won't fit on the stack is
exactly the correct thing to do.  Allocating it with new() is very similar,
but leaves the array locked and possibly causing fragmentation all the
time.  If it's only being used briefly in a subroutine and no other memory
allocation calls happen around it, that's probably just fine, but otherwise
you need to keep an eye out for fragmenting memory.

--Matt

          (M.DEATHERAGE [A2Pro Leader], CAT36, TOP10, MSG98/M530)



[EOA]
[OM2]/////////////////////////
          ORCA/MODULA-2 RTC /
/////////////////////////////
Info on the Latest IIGS Compiler!
"""""""""""""""""""""""""""""""""
By Nate Trost
    [A2PRO.GELAMP]


<JUST.DAVE>     My name is Dave (if you didn't already know) and this is
                the Formal Conference for ORCA/Modula-2. I'd like to
                introduce you to Mike Westerfield, of the Byte Works,
                publisher of the ORCA series of languages.

<BYTEWORKS>     Hi folks!

<JUST.DAVE>     To start off, I 'll let Mike explain a little bit about
                what ORCA/Modula-2 is.

<BYTEWORKS>     Tonight we'll be talking about ORCA/Modula-2, the first
                new compiled language for ORCA (and I think for the GS)
                since ORCA/C was introduced.  It's also the first
                compiler I've published that I didn't write!  It's a new
                feeling. 
                
                In addition to answering your questions, I'll
                also chat about two things tonight.  The first is the 5
                minute course in Modula-2, designed to make all of you
                who know Pascal competent at Modula-2!  The other is a
                few of the cool _new_ things that Modula-2 (hereafter M2)
                has that Pascal, and in some cases C, doesn't have.  I'll
                sprinkle those comments throughout the hour as the number
                of questions seems to lag a bit.  :) So, if you have
                questions already, I'm ready for you! 

                While we wait, here's the course: I'm assuming you know
                Pascal.  Start with Pascal, and make these changes:

                1.  Instead of starting your program with Program, start
                    it with IMPLEMENTATION MODULE.

                2.  Don't use BEGIN-END to bracket statements.  All
                    Modula-2 statements are compound, and need an END.  
                    For example, here's a Modula-2 FOR loop:

                      FOR i := 1 TO 10 DO
                         DoSomething;
                      END;

                3.  Procedures and programs all end with a name.  That
                    helps the compiler help you!  For example:

                      PROCEDURE Foo;
                      BEGIN
                      END Foo;

                    That helps the compiler identify problems with 
                    compound statements a lot quicker and more 
                    accurately than C or Pascal compilers can!

                4.  M2 is case sensitive!  All keywords use capital
                    letters.

                5.  M2 uses import statements to pull things from modules.
                    (Modules are like Pascal units.)  They look like this:

                         FROM module IMPORT whatever;

                6.  There are a few other minor details to learn like the
                    ELSIF statement.  (It works like Pascal's ELSE IF).

                It's not too inaccurate to say that all of you who know
                Pascal are now Modula-2 programmers!  It's really very,
                very easy for a Pascal programmer to get going with
                Modula-2.

<Z.CROCKETT>    I heard something about running two (or more things)
                parallel???  Explain.

<BYTEWORKS>     That's called concurrent programming, and it's one of 
                the new features I alluded to earlier.  Modula-2
                implements a small number of primitives that let you
                literally run more that one "process" (like a program)
                at a time, sort of like cooperative multi-tasking.  
                
                There are several uses for it, but to understand why it 
                works like it does, we need to back up and realize where
                the current research in computer architecture seems to 
                be going.  Today we are buying computers with faster 
                and faster CPUs to run our programs faster.  That's one 
                way. 

                Another way is to split the task up, letting several
                computers do the job.  That's called multi-tasking. For
                example, if the GS was a multitasking computer, and you
                wanted your programs to run faster, you wouldn't buy an
                accelerator card, you'd buy a card with 4 more CPUs and
                plug it into a slot!  Modula-2's system is really
                designed to take advantage of this idea.  You start
                another "process" with a procedure called NEWPROCESS.  It
                works like another program.  It has it's own variable
                space and everything.  TRANSFER is used to shuffle back
                and forth between it and any other processes, including
                the main program.  You can send messages back and forth,
                and there is a way for programs to share data. On the GS,
                with a single processor, you end up with something very
                like multi-tasking.


<B.WELLS5>      Is the Modula-2 compiler more efficient than the current
                Pascal compiler? In other words: If I ported a program
                from Pascal to M2, would it run any faster?

<BYTEWORKS>     No.  It might run a little slower.  In general,
                ORCA/Modula-2 is faster than, say, TML Pascal or
                ORCA/Pascal with no optimizations, but slower than
                ORCA/Pascal with optimizations on.  There may be a few
                programs where this isn't true, though.  Another way of
                looking at it is that M2 is not bad, but not an
                improvement on speed, either.  

<B.WELLS5>      What about the sensitive case? Can this be turned on or 
                off?

<BYTEWORKS>     Nope.  As with C, it's a part of the language that can't
                be changed without breaking programs.  For example, BEGIN
                is a reserved word, but Begin is a perfectly legal
                identifier.  

<K.QUINN3>      Thanks, GE Mike. My first question is concerning the 
                flyer mentioning compatability with the current ORCA
                languages ... could you elaborate? 

<BYTEWORKS>     All of the ORCA languages are designed to work together in
                two important ways.  First, they all share common
                conventions for dealing with the programming environment,
                so they can all use the ORCA shell and PRIZM -- which, in
                turn, were designed from day one to handle more than one
                language.  That means you don't have to switch shells an
                editors to switch languages.  
                
                Second, all ORCA languages coexist, and share some library
                routines and a common memory model. That means you can
                write a program in more than one ORCA language.  The most
                common use for this is to write a program partly in, say,
                Modula-2, with some assembly language subroutines.  It's
                possible to mix languages in other ways, too, though. 
                For example, a library of routines written in C could be
                called from Modula-2.

<K.QUINN3>      Ok... so you could mix some subroutines in M2 using
                concurrent programming with a C main program? Also, will
                ORCA/Debugger be compatable? 

<BYTEWORKS>     Yes, you could do the concurrent part in M2 and call C. 
                And yes, ORCA/Debugger and the PRIZM debugger both
                support M2 -- but you need to get ORCA/Debugger 1.1. 
                That's the version designed to support ORCA 2.0 level
                languages.  
                
                Oh, a quick note:  The recent ads say ORCA/Debugger will
                be version 1.0.2, but if you order, you'll get version 
                1.1.  

<R.ADAMS48>     Describe the "direct access to memory" (or whatever it's
                termed...) that M2 has over Pascal and shares with C. 
                Can I directly push to and pull from the stack?  Is type
                casting as stringently required as in Pascal? etc...  

<BYTEWORKS>     You can't push and pull from the stack.  That would be
                Very Bad.  It would, basically, be a great way to test
                crash handling on the GS, but not much else.  :)  
                
                M2 is basically a lot freer with pointers than Pascal,
                more like C.  You can take the address of a variable, or
                event a procedure.  Typing is still strong (thank
                goodness!) but type casting is much better defined than
                in Pascal.  In fact, for pointer use, C is also strongly
                typed, although some pre-ANSI compilers were a bit lax in
                that area.  Modula-2 is very similar to C in the way
                pointers must be cast to be used.

<R.ADAMS48>     Describe the usefulness of the direct access (I don't 
                know C)

<BYTEWORKS>     It basically means you're not restricted to working on the
                actual variable space of your program, the way FORTRAN,
                BASIC, Pascal, etc. all try to limit you.  (In many
                Pascal's, including ORCA/Pascal, there are ways around
                this, but they are not in the language standard.)  For
                example, if you want to read the keyboard latch at
                00C000x directly, you can in Modula-2, while you cannot
                -- without using extensions -- do that in Pascal. 

<T.MYERS4>      Mike, in your BB posting, you mention that ORCA/Modula-2
                shares features with Pascal. Does this include records,
                sets, functions, procedures, and other elementary
                features of Pascal (not OOP/Pascal)? (I jumped in a
                little late ;)

<BYTEWORKS>     Yes.  Modula-2 has all of those, and is also so similar to
                Pascal that any Pascal programmer can pick up the
                language in a matter of hours.  In fact, a little
                earlier, I gave a 5 minute course in Modula-2 for Pascal
                programmer's.  It's worth checking the log for it.  :)

<T.MYERS4>      It's that I have some books on Pascal programming and was
                wondering how hard it would be to use M2 instead
                (standard Pascal). 

<BYTEWORKS>     Modula-2 is so similar to Pascal (but with additional
                features) that I really think you'll be able to learn it
                in an evening, or perhaps a weekend.  Once you do, it's
                very easy to look at a Pascal program from a listing, and
                just type the Modula-2 equivalent.


<BYTEWORKS>     I'm going to start mentioning a few M2 features that are
                not in Standard Pascal while I wait for typing.  Don't
                let it interrupt your questions!

                A.  Unsigned integers.  Modula-2 calls them CARDINAL
                    values.

                B.  Hexadecimal and Octal constants!

                C.  You can put ' characters in strings!

                D.  Procedures can be types!!!!  That means you can have
                    arrays of pointers to procedures, call procedures 
                    through pointers, etc.

                E.  Infinite loops are legal.  :)  There is a LOOP-END
                    statement that loops until you execute an EXIT 
                    statement.

                F.  There is a RETURN starement!  You can bail out early!

                G.  Open arrays!  You can pass two different size arrays
                    to the same procedure.

                H.  Concurrent programming.

<JUST.DAVE>     As long as I have the floor, I'll mention a book I have
                that explains Modula-2 quite well: "An Introduction to
                Computer Science with Modula-2" published by Heath. It's
                basically designed for a 100-level college textbook, but
                it's quite orderly. It's designed for teaching Modula-2
                as a first programming language. Any other suggestions on
                books, Mike?


<BYTEWORKS>     Nope.  I saw some great listings in A2Pro a few days ago,
                but I have to admit, I learned from Wirth's book, and I
                would not recommend it.  :)

<STEVE.HIRSCH>  Hello all!  I was _quite_ surprised to see mention of a
                Modula-2 compiler for any computer coming to market now,
                never-mind the //gs!

                Congrats!  I did a fairly massive amount of programming in
                M2 for the Z80/64180 environment a few years ago.  I
                currently own every single M2 compiler ever written for
                CP/M. I also have literally a shelf full of text books on
                the subject. Rather than take up net bandwidth, I'll
                maybe list the ISBN #'s and titles and upload it to the
                library if people want to see such a thing?

<BYTEWORKS>     You may see more.  A couple of things to keep in mind: 
                Most languages don't peak very fast.  C and Pascal are
                very old.  Modula-2 is relatively new.  Also, Wirth's
                group started licensing the source to their M2 compiler
                recently.  That brings the development time down, and is
                the reason there is an ORCA/Modula-2.

                I'd love to see your library listing.  I'm sure others
                would, too!  

<STEVE.HIRSCH>  Ok, then this will happen.  Given my copious amounts of
                spare time <g>, it may be a week or so.  But, I promise
                and cross my heart!  I missed the beginning of this RTC
                and am curious if you will be supporting interrupt driven
                co-routine switching? 

<BYTEWORKS>     The current coroutines all depend (I think) on TRANSFER.
                I'll bring that up with Peter, though.  

<JUST.DAVE>     For those who didn't know (it hasn't been said in here
                yet tonight) Peter Easdown is the author of the 
                ORCA/Modula-2 compiler.

<STEVE.HIRSCH>  Ok, some of the stuff I wrote was for real-time control
                and absolutely _required_ that co-routines be invoked on
                hardware interrupts - say from serial I/O, etc.  Thanks
                for bringing this out, Mike! 

<BYTEWORKS>     Steve, post some stuff about the interrupt driven
                coroutines in A2Pro, too.  We'll discuss it in depth, and
                maybe figure something out quicker.  

<D.PIERCE8>     How does the speed of compilation compare to the other 
                ORCA languages?

<BYTEWORKS>     Modula-2 is pretty similar.  It seems to handle the
                interfaces a bit better, and maybe be just a tad slower
                at the actual compiling.  All in all, I'd say it's a
                wash.  

<D.PIERCE8>     Who will be handling the bug fixes and possibly upgrades?

<BYTEWORKS>     As publisher, we'll do it.  I do have the source, so if
                Peter falls off the bottom of the world (he's from
                Australia) I can pick up, but the intent is that he will
                do the bug fixes.  

                (The "we'll do it" means we puiblish upgrades, of course.)

<T.BUCHHEIM>    Different languages are good for different types of
                programs.  What types of programs are Modula-2 good at? 
                Anything you can't do well in this language? 

<BYTEWORKS>     Modula-2 is a general purpose language, but unlike Pascal
                it's closer to being a medium level language (like C)
                rather than a true high-level language, like Pascal.  
 
                The difference is that Pascal tries to hide the machine
                from you so you can concentrate on theory, while Modula-2
                encourages you to get personal with the bits and bytes so
                you can do wierd things and do them efficiently and
                easily.  

                Because of this, Modula-2 is well suited for things like
                operating systems, utilities, and (due to concurrent
                programming) multiprocesing.  It also shares some
                high-level support with Pascal that is missing in C,
                though.  It has things like sets, and enumerations are an
                integral part of the language, not an afterthought
                stuffed into the language by someone who didn't seem to
                care (read:  C).  This makes it a good choice for a lot
                of high-level programming jobs, too.  

                For example, our C compiler is written in Pascal, since
                Pascal is a better language for programs like compilers
                than C.  Modula-2 is written in Modula-2.  I would
                happily use it for other compilers, too.  Our Logo is
                written in C, because I needed to get down and muck with
                the bytes to make the memory management efficient;
                Modula-2 would do that job well, too. I'd say it's a
                language with more breadth of scope than either C (which
                I see as a true mid-level language, unsuitable for
                high-level programming) or Pascal (which I see as a
                high-level language that, without extensions, is not
                suitable for systems programming). Does that answer your
                question well enough?
 
<T.BUCHHEIM>    Does Modula-2 support the toolbox and GS/OS the same way
                as Pascal?  And does it have the same internal file
                manipulation? 

<BYTEWORKS>     Modula-2 supports the toolbox fully, and has a complete 
                toolbox interface that is similar in organization and
                scope to the ones for ORCA/C and ORCA/Pascal.  It does
                have an internal file package, but the file packages in
                all of the languages are different enough at the top
                level that they are all different in the library, too. 

                All of our languages share the same console I/O routines,
                but when you use the built-in disk access routines, they
                all go their separate ways.  

                I'd like to announce our universal door prize for tonight.
                All of you here are eligable for a 10% discount off of 
                ORCA/Modula-2 if you place the order in the next 72 hours! 
                That's over and above the offer for free shipping that's 
                still in effect for all GEnie folks until the 15th!  And, 
                for those who have ordered it already, you can claim a 10% 
                discount coupon good for any order for any product in the 
                next 6 months.  Just send a note with your mailing
                address.  And thanks for comming tonight! 

<B.WELLS5>      How much is ORCA/Modula-2? (I don't think this was 
                mentioned :)

<BYTEWORKS>     Retail is $150, like ORCA/Pascal and ORCA/C.  We're
                running an intorductory special now through Feb 28th for
                $75 plus shipping.  Here on GEnie, we're doing a special
                offer for GEnie subscribers for free shipping (a $5
                value) in the US, and $5 off of shipping for overseas
                orders.  

<J.BURKE26>     Regarding feature D:, calling procedures via a table of
                pointers... sounds real cool for doing clever things, but
                maintaining the code could be a real chore. Does the
                debugger translate addresses to procedure names? 

<BYTEWORKS>     No it doesn't.  And you're right:  You can get in trouble
                with careless use of procedure pointers.  Used properly,
                though, they are quite nice.  For example, you can fake
                most of object oriented programming.  Also, for programs
                like our Logo interpreter, you can call the right routine
                based on an array of procedures.  The fact that Pascal
                did not have this feature was one of the two killer
                reasons for using C, instead.  

<J.BURKE26>     Ok, and is there any easy way to error check at runtime,
                like checking address range of the pointers? 

<BYTEWORKS>     You could cross-check with a link map.  That's all I can
                think of off hand.  

<A2PRO.HELP>    How easy is it to port (non-Toolbox) ORCA/Modula-2
                programs to other platforms?  That is, is there anything
                that would be considered machine-specific in the language
                itself?  

<BYTEWORKS>     There are a few places where you could get in trouble.
                Things like word size (how big is an INTEGER, anyway?)
                and extensions.  It's safer than C, as a language, and
                less safe than Pascal for porting.  A lot of portability
                comes from your own style, practices, and care, though,
                not the language, so individual results may vary.  :)  

<J.L.D.>        Hi Mike.. I just wanted to say that I really look forward
                to working with Modula-2.  I've gotta run now (they're
                waiting to take me out for my birthday. It's only a
                little after 6pm here)  Do we send the order info to
                BYTEWORKS?

<BYTEWORKS>     Yes, you can.  Or you can phone.  The number is (505)
                898-8183.  If you sent an order by e-mail, be sure and
                include:
            
                   Name
                   Address
                   VISA or MC card # and expiration date
                   What you are ordering
                   What you expect to pay
          
                You will get a reply from me as soon as I read the order. 

<J.L.D.>        Ok.. thanks... that's all..  C-YAH.. :) 

<BYTEWORKS>     Thanks for comming!
                
                And Happy Birthday.  :)



[EOA]
[LIB]//////////////////////////////
             LIBRARY BIT BONANZA /
/////////////////////////////////
HOT Files You Can Download
""""""""""""""""""""""""""
By Tim Buchheim
    [T.BUCHHEIM]



                            >>> Misc Files <<<
                            """"""""""""""""""

File #3764  APPIICAT2.9.BXY   (ALL)
Uploaded on 12/18/93 by S.BEHRENS
About 45K (d/l time approx. 4 minutes 30 seconds @ 2400 baud)

      This is a catalog of development tools available for the Apple 
// series, both 8-bit and 16-bit, old and new. New version 2.9.


File #3762  RESLIN.BXY  D42   (GS)
Uploaded on 12/18/93 by RICHARD.B
About 68K (d/l time approx. 7 minutes @ 2400 baud)

      This new version of ResLin now displays rPicture resources.


File #3754  CLAYS.TOOL.BXY  (GS)
Uploaded 12/13/93 by C.JUNIEL
About 10K (d/l time approx. 1 minute @ 2400 baud)

      This is a music playing users tool.  It can play Music Studio,
Sound Smith and Synth LAB files.  If you have wanted to put music 
ability into your program, check this out!


File #3753  SPLASH.EDIT.BXY   (GS)
Uploaded on 12/13/93 by C.JUNIEL
About 243K (d/l time approx. 24 minutes 30 seconds @ 2400 baud)

      This is a program that allows you link a dynamic segment to a
program you write that can put up a splash screen when your program 
starts.  It also can play opening music.  It comes with a graphic 
editor.


File #3745  Name: SYNTHFL.1.4.BXY   (GS)
Uploaded on 12/11/93 by D.TRIBBY
About 48K (d/l time approx. 5 minutes @ 2400 baud)

      Synthfile version 1.4, a program designed to be run under the ORCA 
or GNO shell, prints a description of the contents of MIDI Synth
sequence, wave, and instrument files and will also optionally play the
sequence files. Complete ORCA/C source code is provided, with enough
comments so a programmer can learn the "secrets" of using the MIDI Synth
toolset. This version is "GNO aware" and will respond to kill and
interrupt; it will also play without writing to stdout and sleeps while
waiting for a song to quit, using much less of the CPU. Fixes crash
situation that could occur with v1.3. Freeware by Dave Tribby. Packed
with GS Shrinkit.


File #3737  SPICE.INFO.BXY   (GS)
Uploaded on 12/8/93 by B.TAO
About 42K (d/l time approx. 4 minutes @ 2400 baud)

      This archive contains a few text files describing source code
distributions for the SPICE circuit simulation software. 
Uploaded by request of Tim Tobin.



                            >>> RTC Transcripts <<<
                            """""""""""""""""""""""

File #3766  RTC.MODULA2.BXY  (GS)
Uploaded on 12/19/93 by A2PRO.GELAMP
About 11K (d/l time approx. 1 minute @ 2400 baud)

      This is the transcript from the ORCA/Modula-2 Real Time Conference
held with Mike Westerfield of The Byte Works, Inc.
Shrink-It version.


File #3765  RTC.MODULA2.TXT   (GS)
Uploaded on 12/19/93 by A2PRO.GELAMP
About 24K (d/l time approx. 2 minutes 30 seconds @ 2400 baud)

      This is the transcript from the ORCA/Modula-2 Real Time Conference
held with Mike Westerfield of The Byte Works, Inc.
ASCII text (no compression).


File #3743  SEMINAR.4.TXT   (GS)
Uploaded on 12/10/93 by BYTEWORKS
About 13K (d/l time approx. 10 minutes @ 2400 baud)

      Here's the transcript from the last in a series of 4 seminars 
covering the Logo language, and 3D Logo in particular.  This seminar
covered a lot of topics.  The main focus was the 3D Sphere Movie, which
was assigned as a problem in an earlier seminar.  You can find the movie
itself in the library, too: Search for Logo. ASCII text (no
compression).



                            >>> Utilities <<<
                            """""""""""""""""

File #3761  COPYFORK.BXY  V1.4   (GS)
Uploaded on 12/18/93 by RICHARD.B
About 8K (d/l time approx. 1 minute @ 2400 baud)

      Merlin EXE command to copy data/resource forks. v1.4 includes
resource fork compaction (optional) and some other minor changes.


File #3674  SETPFX.BXY  V1.0   (GS)
Uploaded 11/25/93 by RICHARD.B
About 3K (d/l time approx. 20 seconds @ 2400 baud)

      Allows you to specify a full GS/OS pathname for prefix setting, 
which may include special characters, such as spaces and commas. Handy
for use with COPYFORK to and from HFS/AppleShare volumes with deep
directory structures, or simply for accessing HFS or like volumes.



                            >>> Source Code <<<
                            """""""""""""""""""

File #3746  READ.TIMEGS.BNY   (GS)
Uploaded on 12/11/93 by C.JUNIEL
About 2K (d/l time approx. 20 seconds @ 2400 baud)

      This is an Applesoft program that uses a short machine language
subroutine to read the clock on the IIgs using the ReadTimeHex tool 
call. Comments abound.  Applesoft basic file in Binary II. 
(no compression)


File #3730  AVL.TREES.BXY (GS)
Uploaded on 12/7/93 by SOFTDISK.INC
About 24K (d/l time approx. 2 minutes, 30 seconds @ 2400 baud)

      AVL trees are a type of binary tree that remain "almost balanced" 
thus ensuring that the tree doesn't degenerate into anything like a
linked list. This package was written by Philippe Manet using ORCA/C 2.0
without optimizations. The source is well commented.


File #3684  DDT8.SRC.BXY   (ALL)
Uploaded 11/27/93 by PRODEV
About 110K (d/l time approx. 11 minutes @ 2400 baud)

      This is the complete source code for the ProDev DDT8 debugging 
card. The files are in Merlin 16+ format. These files represent the
finest collection of spaghetti code ever assembled (pun intended). Use
at  your own risk.
Requires the ProDev DDT8 debugging card.
Assemble the file "CHAIN". Modify CHAIN to output to only one binary
 file (eg DSK DDT8OBJ) to create a file for programming an EPROM with.



                    >>> GNO Utilities <<<
                    """""""""""""""""""""

File #3699  FIGLET2.0.BXY
Uploaded on 12/1/93 by B.TAO
About 51K (d/l time approx. 5 minutes @ 2400 baud)

      Figlet is a shell utility for GNO which takes standard input
and transforms it into large, ASCII-based letters.  Unlike
other banner programs, figlet is not limited to a single font.

Figlet fonts:   (about 2K each)
File #3726  SMSLANT.BXY
File #3725  SMSHADOW.BXY
File #3724  SMSCRIPT.BXY
File #3723  SMALL.BXY
File #3722  SLSCRIPT.BXY
File #3721  SLANT.BXY
File #3720  SHORT.BXY
File #3719  SHADOW.BXY
File #3718  SCRIPT.BXY
File #3717  PUFFY.BXY
File #3716  MINI.BXY
File #3715  LEAN.BXY
File #3714  JERUSALEM.BXY
File #3713  BUBBLE.BXY
File #3712  BLOCK.BXY
File #3711  BIG.BXY
File #3710  ALPHABET.BXY
File #3709  A3X5.BXY


File #3698  MPAGER1.1.BXY   (GS)
Uploaded 12/1/93 by B.TAO
About 50K (d/l time approx. 5 minutes @ 2400 baud)

      This is a utility that takes plain ASCII files and formats them as
multiple "pages" on a single sheet of paper and outputs the results as
PostScript code.  Has options for size and number of pages per sheet,
output font and sheet header.  Ported by Kent Radek.


File #3697  NENSCRIPT.BXY   (GS)
Uploaded 12/1/93 by B.TAO
About 65K (d/l time approx. 6 minutes 30 seconds)

      This is a utility that takes plain ASCII text files and converts them
to PostScript code suitable for output on any PS-equipped printer (e.g., an
Apple LaserWriter-series printer).  Has options for landscape, titles, font
changes, page size and more.  Includes documentation and source.
'nenscript' is a freely-available clone of the 'enscript' utility.  Ported
to GNO by Jeremy Rand.


File #3696  BED1.0.BXY   (GS)
Uploaded on 12/1/93 by B.TAO
About 24K (d/l time approx. 2 minutes 30 seconds @ 2400 baud)

      This is the only editor for GNO that can handle infinitely long
lines, null bytes in a file and allow binary editing.  It is intended to
replace Prosel-16's "Block Warden" for patching files without leaving GNO.
Written by Phil Vandry.



[EOA]
[TOU]///////////////////////////////
             TOUR OF 8/16 CENTRAL /
//////////////////////////////////
The Great Programmers Magazine
""""""""""""""""""""""""""""""
Chris Budewig
    [K.FLYNN]



I'll Have a DLT On Rye, Please!   Included with each issue are two
"""""""""""""""""""""""""""""""   general-purpose navigation programs
called DLT 8 and DLT 16.  DLT stands for Display Launcher Thingamajigs,
which are text and graphics viewer programs that allow you to page through
articles and source code listings, view diagrams, and launch programs &
demos.  The DLT's included with the first issue were not finished versions,
but were completed in later issues and other features were added as time
went on. Minimum requirements for these programs are a IIGS for DLT 16, or
a 128K //e or better for DLT 8.


            >> 8/16-Central - September, 1990 - File #3393 <<
            """""""""""""""""""""""""""""""""""""""""""""""""

     A full directory of all files on each issue of 8/16 and 8/16-Central
can be found in file #3382 (ESC.INDEX.BXY).  A condensed directory of the
contents of this issue is included below.  The code letters in parentheses
next to each item mean:

  S : Source code -- what you need to create a program
  X : Executable program -- you can run this directly!
  D : Documentation -- tells how the program works and what to do with it
  A : Article -- explains a subject and probably the source code that
      demonstrates it


 /Es.cENTRAL.9009/
 ..READ.ME            Intro and Welcome
 ..GENERAL
 ....ARIEL.AD.TXT     Err... an empty file.
 ....LETTERS.TXT      Reader's write
 ....PUB.PEN.TXT      Editor's editorial
 ..CLASSIC.APPLES
 ....README.8         Description of 8-bit contents!
 ....ZBASIC/          (SA) ZStatus Report, FN Angle2Radians, and FN Stats
 ....GEN.SHUTDOWN/    (SA) How to properly quit any 8-bit application
 ....DOGPAW/          (SXD) The source code to Karl Bunker's file viewing
                            and text compression programs!
 ....ASOFTWORDWRAP/   (SXA) Universal Applesoft Text Output - how to
                            automatically wrap text output in your
                            Applesoft programs
 ..IIGS/
 ....README.16        Description of 16-bit contents!
 ....CPFX.CMD/        (SXD) Bill Tudor's Change Prefix shell utility
 ....LLRE.FOLDER/     (XD) Low-Level Resource Editor v1.1 - edit ANY type
                           of resource (only as hex or ASCII data though)
 ....IIGS.ARTICLES/
 ......M.DAVIS/       (SXA) To Shell With It - How to write utilities in
                            APW C compatible with ANY shell environment
 ......TOOLSMITH/     (A) Review of Nifty List and LLRE (with pictures!)


     For anyone producing lots of text in their Applesoft programs, the
Universal Applesoft Text Output routine will automatically wrap your text
to fit the 40- column text screen and, if it is running on a ][+, convert
all lowercase to uppercase before printing.

     In the article To Shell With It, you can see how to modify APW C's
START.ROOT file to let you write utilities that will accept a command line
from ANY shell... even Finder!


              >> 8/16-Central - October, 1990 - File #3396 <<
              """""""""""""""""""""""""""""""""""""""""""""""

 /Es.centRAL.9010/
 ..READ.ME            Intro and Welcome
 ..GENERAL/
 ....VAPORWARE        Murphy Sewall's industry snapshot
 ....PUB.PEN.OCT90    Editor's editorial
 ....LETTERS          Readers write
 ..CLASSIC.APPLES/
 ....READ.ME8         Description of 8-bit contents!
 ....EOC.FRANCE/      (SXD) External Overlay Command system - external
                            command manager for BASIC.SYSTEM that
                            dynamically loads external commands; includes
                            five external commands:
                              COPY - copies/moves files
                              TYPE - displays the contents of any text file
                              LINEN - displays names of all online volumes
                              ATTRIB - changes file/aux types
                              CRYPT - encrypts/decrypts files
 ....ZBASIC/          (D) Compilation of ZBASIC Technotes
 ....JERRYK/          (SA) "ProDOS Power from Applesoft" - Using the ProDOS
                           Machine Language Interface from BASIC
 ..IIGS/
 ....READ.ME16        Description of 16-bit contents!
 ....ARTICLES/
 ......XCMDS/         (SXA) Hyperstudio XCMDs - how they work and how to
                            make them; includes an XCMD exerciser and four
                            sample XCMDs:
                              XCMD.Beep - Make a beep
                              XCMD.Beep2 - Make multiple beeps
                              XCMD.Date - Find today's date in stack text
                              XCMD.Dial - Dial a Hayes-compatible modem
 ......OVERSCAN/      (SXA) How to draw in the GS screen border area using
                            scanline interrupts
 ....FREDA/           (XD) Handy little debugging init activated by COP
                           instructions you insert into your code
 ....PIXIEV211/       (XD) Memory search/display CDA by Robert Bennett
 ....XTEND.KBD/       (SX) Config program for the Keyboard Lights init


     Note that the sequel to Doni Grande's extended keyboard article, the
Config.Lights program, is present on this issue.  It was promised two
issues ago, but it seems that 8/16 had been going through some deadline
changes to give the readers their issues faster.  As a result, the program
and Murphy Sewall's regular Vaporware column didn't get published until
this issue.

     Have you ever been using added external commands with Applesoft and
run out of memory?  The External Overlay Command (EOC) system will allow
you to  leave your external commands on disk until they're needed, only
taking up  1.5K of memory when not being used.  When you invoke a command,
it will be loaded from disk and executed.



[EOA]
[CAM]//////////////////////////
                CAMPUS GREEN /
/////////////////////////////
A2 University News
""""""""""""""""""
By Nate Trost
    [A2PRO.GELAMP]



NEW COURSE ANNOUNCEMENT   Eric Bush of Kitchen Sink Software will be
"""""""""""""""""""""""   starting a new course on 8-bit programming with
MicroDot starting in January.  This course will be the basis for a future
course on 8-bit Graphical Interface  programming to be taught later in the
year.  Be sure and watch the A2Pro front door and the Bulletin Board for
more on this exciting new course!



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



                       >>> MENU MANAGER KEY GLITCH <<<
                       """""""""""""""""""""""""""""""

<T.BUCHHEIM>   The menu manager doesn't seem to care about whether a
               menu item really has a key equivelent...it'll let you use
               command-control-2 for the first menu item w/o a key 
               equivilent. :)

<A2PRO.HELP>   Tim:  Are you sure?  Maybe that's an AWGS feature.

<T.BUCHHEIM>   Yes, I'm sure...it'll bring up the Finder's About
               box just as well. :)

<A2PRO.HELP>   Tim:  That's like really, really weird, man.  'specially
               since I don't remember seeing any documentation of it.  
               Toolbox easter eggs.  Wow.  :)

<T.BUCHHEIM>   Try it in any program...if the About box is something like
               command-?, it'll bring up an NDA.
               Whatever the first menu item w/o a key equivilent is
               MenuKey doesn't seem to check to see if there is an
               equivilent..just sees a zero...the ASCII value of 
               control-shift-2.  I discovered it a long time ago

<A2PRO.HELP>   Hmmm...

<T.BUCHHEIM>   weird, huh?

<A2PRO.HELP>   So if I hit OA-Ctl-A, it would do the second menu item?

<T.BUCHHEIM>   nope

<A2PRO.HELP>   Why not?  Ctl-A is ASCII 1.

<T.BUCHHEIM>   (unless it had a $01 in the key-equivelent field... the 
               $00 is just how it marks "no equivelent")

<A2PRO.HELP>   Tim:  Oh, right.  Good call.  :)

<T.BUCHHEIM>   Putting a $01 there would make it show open-apple inverse
               question mark because then Control-A would be a key 
               equivilent

<A2PRO.HELP>   Yup.

<T.BUCHHEIM>   So you can't define a menu item to be 
               command-control-shift-2 unless it is the first menu item
               w/o a key equivelent.



                 >>> BUTTON ANIMATIONS IN HYPERSTUDIO <<<
                 """"""""""""""""""""""""""""""""""""""""
                 
<HangTime>     So John, what kinds of things have you been doing in 
               HyperStudio?

<J.L.D.>       Been trying to play with button animation.

<T.BUCHHEIM>   Like in the Studio City demo?

<J.L.D.>       Yea.  Just like

<T.BUCHHEIM>   oh...I did that in one of my unfinished games.

<J.L.D.>       Tried to splice that apart to see what makes it tick.  Not 
               too much luck. :(

<T.BUCHHEIM>   It's not too hard, there are a few ways to do it.  I can't 
               remember right now how I did it...hmmm...I think I used
              "hide" and "show" on graphics objects...but I don't
               remember the exact SimpleScript program

<J.L.D.>       Hmmm.  I may just break down and get the back issue of SC to
               see how they did it.

<T.BUCHHEIM>   If I can find it, I'll see how I did it. :)

<J.L.D.>       Tim, how about a simple script that would play some kind of
               animation and then SHOW another graphic object over the 
               button?

<T.BUCHHEIM>   Yeah, I think that's what it did

<J.L.D.>       Have to experiment a little more. :)

<T.BUCHHEIM>   Used some global variables to keep track of the status on 
               "locking" ones

<J.L.D.>       That sounds reasonable

<T.BUCHHEIM>   It was pretty simple, there's one in the Button
               Ideas stack that might also work, I think.

<HangTime>     BTW, I realize no one has asked, but here's how I'd do
               a button animation in HyperTalk, assuming I had some icons
               numbered 1 through 10:
 
                    Repeat with i = 1 to 10
                      set the icon of cd button "myAnimation" to icon i
                    end repeat

<T.BUCHHEIM>   In HS I'd set it to run a PaintWorks animation or
               have a loop w/graphic objects

<J.L.D.>       Is there an equivalent program for SimpleScript?

<T.BUCHHEIM>   Yes, a loop that Hides/Shows graphic objects.
               The graphics objects would be created as invisible
               on top of the button.  I could write one real quick, 
               just a sec....

                  for x = 1 to 10
                     show graphic x
                     hide graphic x
                  next
                 end of script

               I think that will work.

<J.L.D.>       Thanks,  I'll give it a try.

<T.BUCHHEIM>   BTW, the graphics should be called "1".."10" and be
               invisible (set the name in "Graphic Info")
               (BTW, there are better ways to do this, but this
               should work. :)

<HangTime>     There are ALWAYS better ways.

<T.BUCHHEIM>   Hmmm...better animated button script in just a sec...

               -- animated button

               show graphic "ButtonA1"
               for x = 1 to 9
                 show graphic "ButtonA" & x+1
                 hide graphic "ButtonA" & x
               next x
               hide graphic "ButtonA10"
               end of script

               This might work better, has better names and might look 
               better on the screen.  The graphics objects would be 
               "ButtonA1".."ButtonA10"

<J.L.D.>       Figured that one out. :)

<T.BUCHHEIM>   This one uses better names than just "1"..."10"
               The reversed order of hide/show might look better, too, but
               you should test both ways to see which workds best.



                       >>> SYSTEM 6.0.1 REFERENCE? <<<
                       """""""""""""""""""""""""""""""

<PMP>          Was there ever a toolbox update for 6.0.1?

               I've got the 6.0 manual from Byteworks, but don't know the 
               6.0.1 enhancements if there are any, that is...

<B.WELLS5>     Yes. It will be available from ByteWorks Real Soon! :)

<M.DEATHERAGE> It's shipping this week, Paul.  Mike's been posting about it 
               in the Byte Works category in the bulletin board, and he's
               been giving regular updates there as well.

<PMP>          How much?  How big is it?

<T.BUCHHEIM>   $10 update from Programmer's Ref. for 6.0, I think.
               I think it's supposed to be around 50 pages



                       >>> RESOURCE FORKS ON FILES <<<
                       """""""""""""""""""""""""""""""

<B.WELLS5>     I have a question for consideration: Can a MIDI Synth
               sequence file (Type $D5, Aux $0001) have a resource fork?

<PMP>          I wouldn't think it would matter since only GS/OS will be
               accessing it...

<T.BUCHHEIM>   It should allow one, at least so a user can attach
               a comment in the Finder

<RICHARD.B>    That's a good Q Brian. I thought *almost* any file could
               have a resource fork (for rVersion rComment etc.)

<M.DEATHERAGE> Hmm.  I'd say that it can, but you can't rely on
               the resources staying there if other programs read/save the 
               file.

<B.WELLS5>     That would be OK, Matt. I was just wondering if a resource
               could be saved there for use by a Music program, etc.  I 
               suppose as long as the resource isn't required to exist
               by the program, everything will be cool :)

<M.DEATHERAGE> I'd say it's like adding extra resources to Teach files.

<B.WELLS5>     Is that bad, Matt?

<RICHARD.B>    There's no problem with putting rComments on virtually
               every file I distribute is there?

<T.BUCHHEIM>   As long as they aren't on P8 files. :)

<RICHARD.B>    (BOC)

<B.WELLS5>     I was just thinking it would be cool if a MIDI message could
               be added to a song that will tell my program to play a sound 
               stored in the resource fork.

<M.DEATHERAGE> Defining sysex MIDI messages that refer to things like 
               resource forks is mostly a way to be sure that folks
               without your program find your MIDI files useless.  The
               hope that everyone will switch to your program to hear a
               song is a bit, shall we say, optimistic.  :-)

<B.WELLS5>     Won't most programs filter out sysex MIDI messages that are
               unrecognized?

<T.BUCHHEIM>   sounds like a cool idea, as long as everyone else's
               programs still work. :)

<M.DEATHERAGE> Yes, but if the message says "play this 90 seconds of music,"
               filtering that out isn't going to do what you want!

<B.WELLS5>     My idea is that the sounds would be optional to the actual 
               song. Whoever writes the song should make it sound good
               either way. Yeah, but it would just make people to want
               Brian's program. :)

<B.WELLS5>     Well, the program isn't real yet and won't be for some time. 
               It's just an idea I was throwing around and wondered if it 
               was feasable.



[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        Windows        (Coming Soon!)

     GEnieLamp is also distributed on CrossNet, Internet, America Online,
Delphi and many public and commercial BBS systems worldwide.


     o To reach GEnieLamp on Internet send mail to genielamp@genie.geis.com
       OR jpeters@sosi.com

     o Our Internet anonymous FTP address is: sosi.com.  All current
       versions of GEnieLamp are available in the ~/pub/GEnieLamp
       directory.  Due to the added expense involved, we ask that when you
       get GEnieLamp via the anonymous ftp for GEnieLamp, that it _not_ be
       ftp'd during the hours of 9AM and 5PM Eastern Standard Time.  We
       appreciate your cooperation in this matter.

     o Current issues of all versions of GEnieLamp as well as back issues
       of GEnieLamp IBM 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

     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 us "live" talk to us every Wednesday
       night in the Digi*Pub Real-Time Conference, 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]       EDITOR
        """    o David C. Leithauser [D.LEITHAUSER] HyperRead Editor
               o Brad Biondo         [B.BIONDO]     IBM Staff Writer
               o Tippy Martinez      [WIN.LAMP]     IBM Staff Writer
               o David Holmes        [D.HOLMES14]   IBM Staff Writer
               o Don Lokke           [D.LOKKE]      Cartoonist

   WINDOWS     o Tippy Martinez      [WIN.LAMP]     EDITOR
   """""""     o John C. Osarczuk    [J.OSARCZUK]   Windows Staff Writer
               o Brad Biondo         [B.BIONDO]     Windows Staff Writer


  MACINTOSH    o Richard Vega        [GELAMP.MAC]   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] ST EDITOR
   """"""""    o Mel Motogawa        [M.MOTOGAWA]   ST Staff Writer
               o Sheldon Winick      [S.WINICK]     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
               o Sandy Wolf          [S.WOLF4]      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 Tara Dillinger      [TARA]         Co-Editor
               o Phil Shapiro        [P.SHAPIRO1]   A2 Staff Writer
               o Mel Fowler          [MELSOFT]      A2 Staff Writer
               o Darrel Raines       [D.RAINES]     A2 Staff Writer
               o GEna E. Saikin      [A2.GENA]      A2 Staff Writer
               o Steve Weyhrich      [S.WEYHRICH]   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 Bruce Maples        [B.MAPLES]     Copy Editor
               o Mike White          [MWHITE]       (oo) / DigiPub SysOp
               o Susie Oviatt        [SUSIE]        ASCII Artist


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////
 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 does 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: XTX99014,DIGIPUB and hit
 the [return] key.  The system will then  ask you for your information.
 Call (voice) 1-800-638-9636 for more information.
////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
[EOF]
