

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

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


                      ~ WELCOME TO GENIELAMP A2Pro! ~
                        """""""""""""""""""""""""""
                   ~ HyperLogo Ships ~ New A2U Course ~
            ~ Tour of 8/16 Central ~ ProDev Inc. Joins A2Pro ~
           ~ ORCA/Modula-2 Ships ~ 3D Logo Seminar Transcript ~
         ~ Making Custom Icons ~ Animating Cursors ~ Stack Usage ~
                   ~ HOT NEWS, HOT FILES, HOT MESSAGES ~

////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 GEnieLamp A2Pro   ~ A T/TalkNET OnLine Publication  ~  Vol.1, Issue 10
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 Editor.......................................................Nate Trost
  Publisher.................................................John Peters
   Copy-Editor............................................Bruce Maples
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////
    ~ GEnieLamp IBM ~ GEnieLamp ST ~ GEnieLamp [PR] ~ GEnieLamp TX2 ~
~ GEnieLamp A2 ~ GEnieLamp A2Pro ~ GEnieLamp Macintosh ~ LiveWire Online ~ 
            ~ 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? <<<
          """""""""""""""""""""""""""""""""""""""""""""""""""""""
                            ~ December 1, 1993 ~

 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]        UTILITIES FROM DOWN UNDER [UDU]
  HOT Files You Can Download.            Three Great Utilities.

 DEVELOPERS CORNER ....... [DEV]        3D LOGO SEMINAR RTC       [3DL]
  News From Online Developers.           Lists, Movies and Logo Magic.

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


       //////////////////////////////////////// GEnie_QWIK_QUOTE ////
      /    "If it's a LARGER computer you want,                    /
     /                    why not just buy a BIGGER case?"        /
    //////////////////////////////////////////////// J.KLAGES ////



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

     o TOP OF THE PAGE

          o NOTES FROM THE PUBLISHER



                          >>> TOP OF THE PAGE <<<
                          """""""""""""""""""""""
                 ~ Welcome to the December GEnieLamp A2Pro! ~

      There's a lot of neat and exciting stuff going on in A2Pro, and you
can learn all about it in this issue!  The amount of things going on made
putting this issue together a challenge, but it was well worth it.  Below
I'll briefly cover some of the highlights that are described in detail
later on in the issue.

      A2 University has returned with a great new course on using the IIgs
List  Manager tool.  This course, taught by Softdisk Publishing programmer
Bryan Pietrzak, shouldn't be missed by anyone with an interest in IIgs
desktop programming.  Read the Campus Green column for more information.

      The 3D Logo seminars have been completed and we have another
transcript from those seminars in this issue.  3D Logo is proving to be a
powerful new language that makes learning programming concepts even easier
and more fun than ever before.  The Byte Works is actively supporting 3D
Logo and its companion product, HyperLogo, in A2Pro.  The Byte Works has
also started shipping the new ORCA/Modula 2 compiler, a new language that
adds to the suite of ORCA programming products.

      Procyon's new 2.0 version of the GNO/ME UNIX style multitasking
environment is also generating a lot of excitement in A2Pro.  Procyon has
been busy giving support in A2Pro both in the bulletin board and the
library.  New versions of several GNO utilities are now available in the
A2Pro library, and direct GNO kernel updates are available for registered
users right in A2Pro!

      Be sure and check out Industry Connection in thisissue for more
information  from The Byte Works, Procyon, and the other companies that
support Apple II programmers here in A2Pro.

      All this and much, much more this month!  Enjoy the issue! 

          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   A2PRO ODDS & ENDS

               o   WHAT'S NEW?

                    o   PROGRAMMER'S TIPS

                         o   HOT TOPICS

                               o   MESSAGE SPOTLIGHT



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

 [*]  CAT9,   TOP7,   MSG{1}.................Applesoft BASIC help please!
 [*]  CAT11,  TOP8,   MSG{9}........Programming Algorithms and Structures
 [*]  CAT15,  TOP4,   MSG{66}................................QuickDraw II
 [*]  CAT15,  TOP8,   MSG{84}..............................Sound Tool Set
 [*]  CAT16,  TOP8,   MSG{1}.......................Writing ResLin Editors
 [*]  CAT16,  TOP13,  MSG{25}..............Program Development Discussion
 [*]  CAT19,  TOP7,   MSG{1}..........................Calling Conventions
 [*]  CAT30,  TOP2,   MSG{1}....................................GNO Shell
 [*]  CAT31,  TOP9,   MSG{89}...............GSLib - A Library of Routines



                      >>>BULLETIN BOARD NEW TOPICS <<<
                      """"""""""""""""""""""""""""""""
                      
 [*]  CAT16,  TOP8.................................Writing ResLin Editors
 [*]  CAT19,  TOP7....................................Calling Conventions
 [*]  CAT35,  TOP1....................................About ProDev Online
 [*]  CAT35,  TOP2.....................Using the DDT Debugging Card Q & A
 [*]  CAT35,  TOP3........................DDT 8 & DDT 16 Bundled Software
 [*]  CAT35,  TOP4...........................................DDT Hardware
 [*]  CAT35,  TOP5.............................Modifying the DDT Software
 [*]  CAT35,  TOP6..........................Debugging Tips and Techniques
 [*]  CAT35,  TOP7............................Other Ideas and Discussions



                         >>> A2PRO ODDS & ENDS <<<
                         """""""""""""""""""""""""

TIM BUCHHEIM JOINS STAFF   The December GEnieLamp A2Pro will be available
""""""""""""""""""""""""   in just a few days, so be sure to grab the
November issue off the A2Pro Main Menu if you haven't done so already!
It's full of all kinds of great information...that doesn't taste like
chicken!

      In other GEnieLamp A2Pro news, I've hired a new staff writer to help
me with the regular chores involved with putting each issue together.
Starting with the January GEnieLamp A2Pro Tim Buchheim will be handling the
RTC and Library sections of the Lamp.  I'm glad to have the help and am
looking forward to working with Tim, welcome aboard!

Nate GEnieLamp 
A2Pro Lamplighter
         (A2PRO.GELAMP [65-Nate-16, CAT1, TOP15, MSG:78/M530)


PROGRAMMER WANTED   Hi All!!!! Can you believe it's been over 6 MONTHS
"""""""""""""""""   since I've been through this way?? I'm posting here 
because my company is looking for a _good_ 6502 programmer (thats plain
old 6502...not 816! hehe) and I knew immediately where to come looking. 
Other assembly languages are a plus, and there will probably be much
more than just 6502 to do.  IBM PC based C, embedded systems, travel,
lots of excitement (just like the army)...and lots of hard work. (I will
let you use a GS for the 6502 though!).  The position is full time, and
would require relocation to Reno, NV..but we have several offices all
over the country...maybe we could work something out.

      Give me a call during the daytime if you are interested and we'll 
talk dawgs, dawghters, cawfee, you know, just tawk.

  Shawn Quick
  Imagineering Systems, Inc.
  (702) 856-3900
               (S.QUICK1, CAT13, TOP8, MSG:58/M530)



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

EXPRESS TECHNICAL UTILITIES   I should have done it earlier, but I've 
"""""""""""""""""""""""""""   just uploaded some technical stuff for the
Express print spooler from Seven Hills Software Corp.

      Included is a utility for viewing spool files, with the option of
displaying all the ImageWriter II code descriptions (comes as as
application, and a utility that adds a 'View' button to the normal Express
edit dialog), and some IPC and data area technical notes.

      The spool viewer should come in handy for budding printer driver
authors, as it formats it into seperate _PrDevWrite records, and in the
case of it being an ImageWriter, also displays the what the codes are
doing.

Regards, 
Richard

(btw: Forgot to mention that you need at least some Express spool files
for any of this to be useful, and it would be preferrable to actually
have Express)
           (RICHARD.B [Richard], CAT10, TOP26, MSG:38/M530)


DEVELOP JOURNAL NOW IN A2PRO LIBRARY!   > SyndiComm, who manages the
"""""""""""""""""""""""""""""""""""""   > Macintosh, Apple II, and 
> PowerPC RoundTables on GEnie, has signed a licensing agreement with
> Apple Computer to provide these publications.  You must read and agree
> to a licensing agreement before you can download these files.

      Yes, folks, that means we'll get the Apple II content of _develop_ in
the A2Pro libraries as soon as I can find some free moments to get it
packed and write descriptions for it.  There are five articles and several
Q&A columns, though I'm not sure I can find all of them in text file
format. Four of the articles have source code, and two of those are in MPW
IIgs format.

     More news as they become available.  :)

--Matt
         (M.DEATHERAGE [A2Pro Leader], CAT1, TOP17, MSG:124/M530)



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

NEWHANDLE TIP   Just thought I'd share a tip with people.  The following 
"""""""""""""   will fail:

    theHandle := NewHandle(0,gMemoryID,attrLocked,NIL);

 whereas this is just fine:

    theHandle := NewHandle(0,gMemoryID,0,NIL);

 Why? Because you can't have an empty, locked handle.  That's why :)

      If you are creating an empty handle that will later be filled and 
need it to be locked, you'll just have to lock it later.
         (SOFTDISK.INC [Bryan Zak], CAT15, TOP2, MSG:96/M530)


DEVICE UNIT NUMBERS   I didn't see a topic for SmartPort, so I will ask
"""""""""""""""""""   this question here.  Is there a TechNote or file 
around here that would show how to create a relationship between the
Smartport Unit Number and the ProDOS unit number?

      What I am trying to do is ID the device type at a given slot,drive.  
Is the Smartport the way to go?  If not, is there a preferred method  for
doing this type of thing?
           (KITCHEN.SINK [Eric], CAT7, TOP6, MSG:53/M530)

<<<<<   You can turn the ProDOS unit_number into a SmartPort identification
"""""   by following the steps in ProDOS 8 Technical Note #21,
"Identifying ProDOS Devices."  This Note tells you _everything_ that's
reliable about identifying ProDOS devices, and has held off lots of
questions since we first wrote it five years ago.

--Matt (wow, has it been that long?)
         (M.DEATHERAGE [A2Pro Leader], CAT7, TOP6, MSG:54/M530)


FINDING MEMORY USAGE   Here's a question for anyone who might know:
""""""""""""""""""""
      Suppose I know a user ID and I want to find out how much memory that
particular ID is currently using in the system.  Please note that the user
ID is not "mine", but the ID of a system extension such as an NDA, CDA,
INIT, Finder Extention, etc.

      What tool calls can be made to determine this information.  It looks
to me like I would need to know where there is a "list" of all handles in
the system, then I can check their user-ID's and size, adding up the sizes
when the user ID matched (masking off the aux ID's, if any).  Anyway, this
sounds like alot of work.  Is this what needs to be done? If so, _where_ is
the list of handles kept? How would I know if it is a _valid_ handle?

     Thanks in advance, Bill {W.TUDOR}
                 (W.TUDOR, CAT15, TOP2, MSG90/M530)

<<<<<   If you downloaded GSLib there is a routine in there to do this
"""""   (MMIDInfo).  You pass it a user ID and a mask (in case you want
only memory associated with a certain auxiliary ID or something like that).
It then returns a long indicating the total number of bytes associated with
that ID.

      In any case, I did this by walking the handle chain and examining
each handle.  To do this, get a handle (I call FindHandle on the location
of the subroutine) and walk the handle back to the head of the handle list.
(The handle list is a double-linked list with NIL pointers at the head and
tail for previous and next respectively).

      Once at the head, you can then just walk the entire handle chain.
Pretty straight-forward actually.

btw: you might want to know the structure of the data a handle points to:

  olocation       EQU  0         ; offsets for handles
  oattributes     EQU  4
  ouserID         EQU  6
  olength         EQU  8
  olast           EQU  12
  onext           EQU  16
            (SOFTDISK.INC [Bryan Zak], CAT15, TOP2, MSG91/M530)


80 TO 40 COLUMNS   What is the applesoft syntax to change from the 80
""""""""""""""""   column screen to the 40 column screen.  ( i.e. the 
equivalent of esc 4 )
               (J.BAUER4 [oldman], CAT9, TOP7, MSG:98/M530)
 
>>>>>   In Applesoft, to change from 40 columns to 80 columns use:
"""""
        PRINT CHR$(4);"PR#3"

     To change back to the 40 column mode, use:

        PRINT CHR$(21) : PRINT CHR$(12)

      Printing CHR$(21) switches to 80 column mode and the CHR$(12) 
clears the screen.  It's best to use them together but not necessary.
               (R.NIELSON1 [Russ!], CAT9, TOP7, MSG:99/M530) 


DEAPS HEAPS TREES   This seems as good a place as anywhere to ask this
"""""""""""""""""   question. :)
      I've been assigned a programming project for school in which we're
required to use a data structure called a "deap".  This is a tree in which
every left child is the minimum value of the left subtree, and every right
child is the maximum value of the right subtree.

      Has anybody heard of this?  Has anybody got any sample source code
for it?  I'd like to see some sample source, or at least get a decent
algorithm for programming this structure.  I've been trying various
routines, but they haven't been working as well as I'd like.  In
particular, I need routines to delete the minimum and maximum entries in a
deap, and to insert a new value into the deap.
              (E.SHEPHERD [Sheppy], CAT11, TOP8, MSG:9/M530)

>>>>>   What you are describing as a "deap" is in reality a binary-tree.
"""""   First we need a data structure that describes each "Leaf" in the 
tree...

 typedef struct {
      void *Left;         /* Left branch in the tree */
      void *Right;        /* Right branch in the tree */
      unsigned int Val;   /* Sort value */
      } TreeNode;

 TreeNode Nodes[100];     /* Create as many leaves as there are entries */
 unsigned int NodeCount = 0;   /* No leaves are allocated */

 Now we need a routine that creates a NEW leaf...
 Note : that an ending leaf is one that has NO left and right branches.

 /**********************************

      Create a new binary tree node

  **********************************/

 void MakeNode (unsigned int Val)
 {
      TreeNode *NewNode;

     NewNode = &Nodes[NodeCount];  /* Get pointer to the new node */
     NewNode->Left = 0;             /* No children nodes */
     NewNode->Right = 0;
     NewNode->Val = Val;            /* Sort value */
     NodeCount++;              /* Index to the next free memory */
 }

 /**********************************

      Insert a new node into my binary tree
      Note : This will also do a sort

  **********************************/

 void InsertNode(unsigned int Val,objtype *Entry)
 {
      ActorNode * NewNode;

      if (NodeCount) {         /* Only if there are entries! */
           NewNode = Nodes;    /* Go to the first entry */
           for (;;) {
                if (NewNode->Val <= Val) {  /* Which way should I go? */
                     if (NewNode->Right) {  /* Is there a branch here? */
                          NewNode = NewNode->Right;     /* Go there! */
                     } else {
                          NewNode->Right = &Nodes[NodeCount];     
                          /* Create a branch to the right */
                          break;
                     }
                } else {
                     if (NewNode->Left) {          
                       /* Is there a branch here? */
                          NewNode = NewNode->Left; /* Follow the branch */
                     } else {
                          NewNode->Left = &Nodes[NodeCount];
                          break;
                     }
                }
           }
      }
      MakeNode(Val,Entry);          /* Create a NEW node and exit */
 }

 /**********************************

      Now, let's replay the data SORTED!

  **********************************/

 void PlayNodes(TreeNode *NewNode)
 {
      unsigned int Val;        /* Pointer to active object */

      if (NewNode->Left) {     /* Is there a farther object? */
           PlayNodes(NewNode->Left);     /* Draw it */
      }
      Val = NewNode->Val; /* Get the pointer to the current object */
      DoStuff(Val);       /* Do the action */
      if (NewNode->Right) {    /* Is there a closer object? */
           PlayNodes(NewNode->Right);
      }         /* Exit! */
 }


 Wasn't that easy!!!

 Bill Heineman

                 (BURGERBILL, CAT11, TOP8, MSG:10/M530)

<<<<<   I have never heard of such a beast named "deap".  Are you sure it
"""""   is not a "heap" instead ? (Not to be confused with the name of the
memory that can be dynamically allocated with malloc() or NEW, as it is
often called in the C and Pascal languages).

      A "heap" is a data structure used mostly for a sort algorithm
appropriatly named "heapsort" and another data structure : the "priority
queue"; this last one is a queue when the first out is not necessarily the
first in, but the one with the highest priority, whatever that means for
the problem at hand.  Usually, heaps and priority queues are
interchangeable, although the first is the means of implementing the
second.

      A heap is a binary tree which must satisfy these 3 rules :

   1) The tree must be balanced, that is the difference in height of all
      leaves must be at most 1 (the height of a tree is the length from 
      the root to the lowest level).  In other words, all the leaves of 
      the tree must be on two adjacent levels.

   2) It must be also complete.  That means that all the levels of the 
      tree must be filled, except maybe the lowest.  That implies that 
      nodes are inserted into a level of the tree from left to right until 
      that level is full, in which case a new level is started.

   3) The root of each subtree has a value which is larger than the values
      of all of its children.  That means that the root of the tree has 
      the largest value.  However, the siblings of each node do not have to 
      be ordered.

Here is an example of an heap :

                                    J
                /------------------/ \------------------\
                I                                       F
        /------/ \------\                       /------/ \------\
        G               H                       B               E
    /--/ \--\       /--/
    A       D       C


      While a classic binary tree is best represented with a linked data
structure, a heap is usually stored in an array.  In fact, from the first 2
rules above, a node at position N in the array has its 2 children at nodes
2N and 2N+1 if the array starts at index 1 (if it starts at index 0, like
in C, the children will be at indices 2N+1 and 2N+2).  Thus the node at
index 1 has its children at indices 2 and 3, the node at index 2 will have
its children at indices 4 and 5, and so forth.

      This representation is very efficient for a priority queue or for the
heapsort, for which the only operations are "insert" and "delete"; however,
it would be fairly inefficient if it was used for a general data structure.
Furthermore, the usage of an array requires that the maximum number of
nodes is known in advance.

The above tree is thus represented as this in an array :

  J I F G H B E A D
C  node values
 1 2 3 4 5 6 7 8 9 10
array indices

      A new node is inserted in the tree by adding it at the end and then
reordering the tree to satisfy the heap rules defined above (this is called
reheaping); this is done from the bottom of the tree to the top (ie from
the right to the left of the array).  For the deletion, we always remove
the largest node which is the first (ie the root of the tree); here, the
reheaping is done from left to right after copying the rightmost node into
the first and decreasing the size of the array.

      Here is a sample implementation in Pascal (N is the current size of
the array and H is the heap; for this example, each cell contains a single
integer) :

 procedure init_heap;
 begin
  N := 0;
 H[0] := maxint;
 end;

 procedure insert ( i : integer );
 var j, k : integer;
 begin
 N := N + 1;
 H[N] := i;
 k := N;
  j := H[k];
 while ( H[k div 2] <= j ) do
 begin
  H[k] := H[k div 2];
  k := k div 2;
 end;
    H[k] := j;
 end;

      The algorithm works as follows : the new node is added at the end of
the array; then if the new child is greater than its parent, they are
swapped; that fixes the heap rule violation.  This may again violates the
rule, so this process is repeated until the array satisfies the rule. Note
that the heap starts with a pseudo-element 0 which is used to break out of
the loop without requiring to check the value of K.

 function remove : integer;
 label 1;
 var i, j, k : integer;
 begin
  remove := H[1];
 H[1] := H[N];
 N := N - 1;
 k := 1;
  i := H[k];
 while ( k <= N div 2 ) do
 begin
  j := k * 2;
  if ( j < N ) then if ( H[j] < H[j+1] ) then j := j + 1;
  if ( i >= H[j] ) then goto 1;
  H[k] := H[j];
  k := j;
 end;
 1 : H[k] := i;
 end;

      This functions moves down the heap, swapping node at position K with
the larger of its 2 children if necessary, and stopping when reaching the
bottom of the heap or when node K is larger than its 2 children (this
second condition required the use of the GOTO statement, since ORCA/Pascal
does not support breaking out of a loop :-) I also had to use 2 ifs to
check for the largest child in case node K has only one child, because in
ORCA/Pascal the AND does not short-circuit the second comparison.
           (P.MANET1 [Philippe], CAT11, TOP8, MSG:15/M530)


NO MONSTERS ALLOWED?   Hee hee, I just had a little flashback this evening
""""""""""""""""""""   and tried something I had forgotten about...and it
still works with Basic.System 1.5.

At the prompt: NO MONSTERS ALLOWED

Think I originally saw that mentioned in the old Big Tip Book.

Nate (still amused for some strange reason :-)
         (A2PRO.GELAMP [65-Nate-16, CAT7, TOP4, MSG:24/M530)

>>>>>   The reason it works is that NOMON is a perfectly valid 
"""""   command under DOS 3.3, and to make porting programs easier, B.S
supports it.  It just ignores it though, including the parameters (as you
found out).

      MON, on the other hand, was changed to MTR in the newer versions and
puts you into the Monitor (lizard).  But it, too, was a do-nothing in the
earlier versions.
                 (QUALITY, CAT7, TOP4, MSG:25/M530)


ANIMATING CURSORS   Okay, question of the day: what is the proper method
"""""""""""""""""   of doing an animated cursor? Is it ok to call 
SetCursor from within a hearbeat task?
        (SOFTDISK.INC [Bryan Zak], CAT15, TOP4, MSG:75/M530)

>>>>>   Well, technically, yes, but it's kind of bad form.  In a heartbeat
"""""   task, since it's based on an interrupt, your cursor continues to
spin even if you crash or enter an infinite loop, as long as you don't lock
out interrupts.  This is not the kind of user feedback one would hope for.
:)
      The best thing to do in any periodic task is regularly check for 
commandperiod and animate the cursor at the same time.

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

<<<<<   I don't remember right off, but I believe Cool Cursor uses the
"""""   scheduler to change the cursor.  When it's time to change, the
heartbeat fires off, and that schedules the cursor change.  Then when the
system is free to do stuff, the scheduler fires off and the cursor changes.
                (JWANKERL [Joe], CAT15, TOP4, MSG:77/M530)


PASCAL'S TRIANGLE IN BASIC   I'm looking for help with an algorithim (in
""""""""""""""""""""""""""   Applesoft BASIC) to produce Pascal's Triangle.
Pascal's Triangle is a mathematical problem that has the number 1 at the
top and along both sides.  The center numbers are the answer from adding
the two numbers above.  Shown below is an example with 7 rows:

                                   1
                                 1   1
                               1   2   1
                             1   3   3   1
                           1   4   6   4   1
                         1   5  10   10  5   1
                       1   6  15   20  15  6   1
                     1   7  21  35   35  21  7   1

      I figure that you have to use a couple of arrays and add the values
in one array to produce the next array, then move the new array into the
old array and repeat the procedure for the next row, etc., but I'm just not
sure how to code it.  Any help would be appreciated.
              (L.ELSEMAN1 [LARRY], CAT11, TOP8, MSG:16/M530)

<<<<<   Well, you don't have to use arrays, but before I explain how,
"""""   here's the little background I know just in case.

      Pascal's Triangle is a representation of powers of (a + b).  If X 
is the power (a + b) is being raised to, then for different values of X
you get:

 X=0: 1
 X=1: 1a^1 + 1b^1
 X=2: 1a^2 + 2a^1b^1 + b^2
 X=3: 1a^3 + 3a^2b + 3ab^2 + 1b^3

which starts to reveal the pattern of the Triangle:

 0: 1
 1: 1 1
 2: 1 2 1
 3: 1 3 3 1

      Look at level three (X=3).  Notice that the power that 'a' possesses 
in each group goes from 3 on the left down to 0 on the right.  The
opposite effect appears for 'b' (0 to 3).

      Now, a little trick my Theory of Computing professor showed me:  if 
you begin with a one on the left, multiply that value by the exponent of
'a' and divide by one more than the the exponent of 'b', you get the
number that goes with the next group on that level.  For example, in
level three:

 begin with 1
 multiply by 3 and divide by 0+1 to get 3
 multiply by 2 and divide by 1+1 to get 3
 multiply by 1 and divide by 2+1 to get 1

which yields level three's sequence, 1 3 3 1, or a^3 + 3a^2b + 3ab^2 +
b^3.

      This works for any level in the Triangle, so if the level you are
looking for is in the variable TriExponent, the following will print the
correct sequence of numbers in that level:


  Mult = 1
  for i = TriExponent to 1 step - 1
    print Mult; " ";
    Mult = Mult * i / (TriExponent - i + 1)
  next i
              (K.FLYNN [ Chris ], CAT11, TOP8, MSG:18/M530)


GETDEVICENAME   I'm not sure of the correct way to handle the
"""""""""""""   GetDeviceName call.  This is what I was considering doing:

 GetDeviceName  anop
                pha
                pha
                _PrGetPrinterDvrName
                _PrDevPrChanged

                plb
                clc
                lda  #$0000

                rtl

Is this correct?
             (H.WILKINSON2 [Heath], CAT16, TOP3, MSG:17/M530)

>>>>>   The Print Manager calls this driver routine when the printer
"""""   driver has changed.  If you have a network string that identifies 
your driver, you pass it to _PrDevPrChanged.  Otherwise, you don't have
to do anything as far as I can tell.  I'd prefer doing nothing to
passing something that's not a network NBP entity.

      By the way, as part of our license with Apple, we now have the rights
to upload my sample printer driver Picter and the article from _develop_ #4
about how to write a printer driver.  I hope I can get this uploaded by
week's end.

--Matt
         (M.DEATHERAGE [A2Pro Leader], CAT16, TOP3, MSG:18/M530)


COMPILING IN GNO   I have a few questions about writing programs and
""""""""""""""""   compiling from within GNO.  The first is how to set the
language type when invoking the editor (right now I'm using the ORCA
editor).  I can change the  SYSTAB file for the editor as described in the
ORCA C manual (first field to 7 for C), but will I have to do this before
using the editor when I want to use Pascal instead (assuming I buy Pascal
as well)?  What if I'm using vi or EMACs instead?  How would I set the
language so the COMPILE command will work?

      My second question is what is the command to compile the source,
invoke the linker, and produce an execucable file?  If I use COMPILE, it
stops before the linker.  Is there another command I should use or a flag
that should be set?

      I am also having problems with the man command.  If I enter "man
yankit" my system hangs for a long time (I usually reboot).  I can't find a
man page for yankit in any of the directories.  Also, compile doesn't have
a man page as well, but "man compile" just reports this.

      I have a rom 1 GS with 4 meg and am using GNO 2.0.3.

      Now that I've had some time to read the Orca manual, I'm stumped.
How do I use "edit" (Orca editor) from GNO so that it saves C type files
that I can later compile?  Right now I have to do everything from the Orca
shell and then start GNO up.

          Michael
           (M.POTTER4 [AppleNET], CAT30, TOP1, MSG:23-24/M530)

<<<<<   > How would I set the language so the COMPILE command will work?
"""""
 Use:

 chtyp -l lang filename

      See the manual page on chtyp for valid langauge types.  You have to
create the file first and then set the type; I agree that this is annoying,
but it will be resolved sooner or later.

 >If I use COMPILE, it stops before the linker.

use 'CMPL'.  Also, make sure your gshrc file contains:

  set keepname='\$'
(this keeps you from having to type 'cmpl foo.c keep=foo'.  This is
documented in the ORCA manuals).

 >I can't find a man page for yankit in any of the directories.  Also,
 >compile doesn't have a man page as well, but "man compile" just reports
 >this.

      I'll check into the 'man yankit' problem; yankit _should_ have a
manpage. I expect to do a bug-busting session this weekend, and I'll let
you know how it goes.

 Jawaid
                 (PROCYON.INC, CAT30, TOP1, MSG:25/M530)


VULCAN INFO WANTED   Info needed on "original" (not "Gold") Vulcan IDE
""""""""""""""""""   interface registers
I recently obtained an old (appears to be 1989 vintage) Applied Engineering
Vulcan IDE interface card (original 40Mb drive has frozen spindle) As I
have an old 20Mb IDE (from an old MessyDos machine) I figure I may as well
try to write some new ROM code (maybe even a GS/OS driver?) so I can use
this available hardware.  My problems are:

   1) I don't have any of the AE utilities (I presume these allowed the 
      user to do low level formating, partitioning, etc) 
   
   2) I don't have any docs whatsoever (AE docs that is!) 

   3) Without the above two items, it's real hard to finger out the 
      registers!

      If someone _knows_ where the various registers are, bitmapping of
them, etc (all the _good_ stuff :) I'd appreciate hearing from them.

      If someone has an old dead or dying Vulcan with docs, software, etc
I'd like to get ahold of the docs & utilities (and I can give the hardware
a better home than the closet or landfill) I can disassemble the utilities
to figure out the registers.

      Please don't send me to AE, they won't talk to me, and I won't talk
to them (have been at war with them for years... no details are needed)

      I _HATE_ trying to disassemble rom code that is "paged" so that it
has several cross-calling images in the $C800-$CFFE space.  (set rom bank,
call code, that code changes the bank and "falls thru" to the new
bank...ACK!!)
             (H.HISLOP [Harold], CAT13, TOP11, MSG:39/M530)

>>>>>   First, you need the documentation on the IDE 16 bit interface.
"""""   This will clarify HOW to talk to the hard disk drive via the task
file.  This information can be had at most IBM clone dealers who sell bare
hard drives (I use a Connor 2024 manual at leaves little to the
imagination).

      Next, you look at the ROM of the Vulcan to see how it sends the task
file information to the drive (The task file DOESN'T CHANGE from the Connor
manual) you just need to find out how the AE card talks to drive.

      If memory serves me (NOT!) there is a register you write that tells
the vulcan controller to pull up a certain task file register much like how
the IIgs Sound GLU has an address register and a data register.

     Hope this helps out.

Bill Heineman
               (BURGERBILL, CAT13, TOP11, MSG:40/M530)


CHANGING BATTERY RAM SETTINGS   In the Toolbox references, it is stated
"""""""""""""""""""""""""""""   that any Battery-RAM changes made by the 
Miscellaneous ToolSet calls will take effect AFTER the system is powered
down and rebooted.

      My question is this...Is there any way to change the B-RAM settings, 
and have the changes take effect IMMEDIATELY (just as if the user went
into the Control Panel CDA and made the changes himself)?

     Any suggestions on how to do this?  Thanks in advance. :)
             (SNAKEBYTES [Greg B.], CAT15, TOP3, MSG16/M530)

<<<<<   Yup...JSL TOBRAMSETUP, as documented in Firmware Reference.  Be
"""""   sure to have the carry arranged correctly so you don't wind up 
switching slot settings!

      (The problem is that, for example, changing the Battery RAM byte for
the border color doesn't change the border color register.  TOBRAMSETUP
reads the battery RAM and sets up all the system parameters as it
specifies.)

--Matt
           (M.DEATHERAGE [A2Pro Leader], CAT15, TOP3, MSG17/M530)
 

>>>>>   Here's the code that Apple used in CDEVTester:
"""""

 UpdateSysBRam ()
 {
    asm            /* Update RAM copy of parameter-RAM */
      {
       phd            /* save direct page register word on stack */
       phb            /* save data bank register byte on stack */
       pea #0x0       /* push two bytes of 0 on the stack */
       plb            /* set data bank register byte to 0 */
       plb            /* clean up extraneous byte from stack */
       php            /* save processor status register byte on stack */
       sep #0x30      /* set processor status to shortm+shortx */
       sec            /* set carry so ToBRAMSetup won't alter slot setup */
       jsl 0xE10094   /* call ToBRAMSetup */
       plp            /* restore processor status mode byte from stack */
       plb            /* restore data bank register byte from stack */
       pld            /* restore direct page register word from stack */
      }
 }

           (SOFTDISK.INC [Bryan Zak], CAT15, TOP3, MSG18/M530)


WINDOW ORDER ON THE DESKTOP   A question on window planes.... :)
"""""""""""""""""""""""""""
Is there any LEGAL way of finding the order of windows stacked up (planed)
on the desktop?

      If I'm not mistaken, the GetFirstWindow and GetNextWindow calls
return the order of windows in window list, NOT the order (planes) of
windows on the desktop.  If this is the case, is there any other way to
find a particular window's plane?

      As part of a utility, I'm trying to "step" through the list of
windows, plane- by-plane, as they appear to the user on the desktop.  Once
I locate a window in a particular plane, I want to find its grafPortPtr and
manipulate it from there.  Any suggestions on how this could be made to
work?

     Thanks in advance.  :)
            (SNAKEBYTES [Greg B.], CAT15, TOP14, MSG77/M530)

>>>>>   Well, believe it or not, the window list is _always_ sorted in
"""""   front plane to back plane order.  Otherwise the Window Manager
would have to maintain some other sort of list to figure out the planar
ordering.  Simply calling FrontWindow(), and then GetNextWindow(windowPtr)
repeatedly will walk the list in front to back order.  Simple, eh? :-)
              (MURPH [jim@apple], CAT15, TOP14, MSG78/M530)

<<<<<   Don't forget to call GetSysWFlag when doing this: you probably
"""""   don't want to manipulate System windows (ie, desk accessories)
           (SOFTDISK.INC [Bryan Zak], CAT15, TOP14, MSG79/M530)

>>>>>   The window list contains all the windows in the order you'd see
"""""   them.  The only exception is that it contains invisible windows
where they'd be if they were made visible, so GetNextWindow and FrontWindow
sometimes don't return the same thing.

      If you check for visibility before operating on the window record,
you should be OK with the calls you already know about.

     --Matt (Live programming help six nights a week!  We must be insane!)
           (M.DEATHERAGE [A2Pro Leader], CAT15, TOP14, MSG80/M530)


OBJECTS & ORCA/PASCAL   I have begun to play with objects.  Though it is
"""""""""""""""""""""   not documented in the ORCA/Pascal, I was trying 
to see if it supported polymorphism and late binding.

      At first, I thought it didn't, but this is probably because I am too
used to the implementation of this concept in C++ and Turbo Pascal through
the so called 'virtual' methods.

      However it does, and it probably works because objects are really
pointers in ORCA/Pascal.  After looking at the generated code, I could see
that the compiler was assigning the pointers to the right methods from each
subclass to an instance of the root class, as in this pseudo-code :

p : the_root_class; s : a_sub_class;

p := s;

      In this example, P's methods are really the S's overriden ones, which
is what polymorphism is all about :-)

      However, I have encoutered a problem while trying this.  That is, the
compiler signals an error when an overriding method defines new parameters,
although this possibility is clearly shown in the manual (page 250).  Here
is a complete example :

ORCA/Pascal 2.0 Copyright 1987,1988,1991,1993, Byte Works, Inc.

   1 program overbug;
   2
   3 type
   4
   5 point = object
   6 x1, y1 : integer;
   7 procedure init ( x, y : integer );
   8 end;
   9
  10     rect = object ( point )
  11 x2, y2 : integer;
  12 procedure init ( xx1, yy1, xx2, yy2 : integer ); override;
****                  ^ forward declared; repitition of parameter list
not allowed
  13 end;
  14
  15 procedure point.init;
  16 begin
  17 x1 := x; y1 := y;
  18 end;
  19
  20 procedure rect.init;
  21 begin
  22 x1 := xx1; y1 := yy1; x2 := xx2; y2 := yy2;
 ****          ^ identifier not declared
 ****           ^ '(' expected
 ****           ^ error in factor
 ****           ^ ')' expected
 ****                     ^ identifier not declared
 ****                      ^ '(' expected
 ****                      ^ error in factor
 ****                      ^ ')' expected
 ****                                ^ identifier not declared
 ****                                            ^ further errors
supressed
  23 end;
  24
  25 begin
  26 end.


     Is it me ? Or is this a real bug in the compiler ?
            (P.MANET1 [Philippe], CAT36, TOP10, MSG75/M530)

>>>>>   Neither.  :)  It's a bug in the manual.  As with all other places
"""""   in ORCA/Pascal where you redefine a procedure, function, or now, 
method, you do not replicate the parameter list.  ORCA/Pascal follows
Jensen & Wirth, the ISO standard, and the ANSI standard on this matter,
and requires that you leave off the parameter list on all but the first
declaration of a procedure or function.

Mike Westerfield
                  (BYTEWORKS, CAT36, TOP10, MSG76/M530)

<<<<<   > requires that you leave off the parameter list on all but the
"""""   > first declaration

Mike,

      It'd be nice if the compiler would allow this anyway (unless 
$ISO+ was specified) because it really makes maintaining units easier.

In any case, a work-around is:

  PROCEDURE Something{a: INTEGER; b: LONGINT};
  FUNCTION  Somethang{: BOOLEAN};

      Doesn't look quite right, and I often do a double-take when browsing
the code, but it does make it easy to remember the parameter lists when
maintaining code written three years ago :)
           (SOFTDISK.INC [Bryan Zak], CAT36, TOP10, MSG77/M530)



                            >>> HOT TOPICS <<<
                            """"""""""""""""""

STACK USAGE IN PROGRAMS   I know that the stack is used, but why can't a
"""""""""""""""""""""""   call to the memory manager be made to ask for the
memory that a procedure of function requires.  I'm not sure but I believe
turbo-pascal does something like that.  I compile my programs on TP and
dont run out of memory like I do on the GS.

     I now set my stack size to 32K to avoid the problem.

  Ken "KAZ" Kazinski
                  (K.KAZINSKI, CAT19, TOP7, MSG15/M530)

<<<<<   For a lot of reasons, first, I wouldn't want the overhead (both
"""""   in terms of speed and code size) of two (at least) Memory Manager
calls for each subroutine (one to allocate and one to release memory).

      Second, how is the compiler supposed to know ahead of time how much
stack space is going to be required? What about recursion?

      Third, it's actually a very inefficient use of the Memory Manager and
stack in many ways because of the allocations going on.

      I'm not sure, but I don't think that PCs have the same kind of stack
limitations we have on the GS.  That's probably why your Turbo Pascal
programs run fine.

     BTW: just what are you doing that you require 32K stacks? In four
years of Pascal programming on the GS I think I've only used a 16K stack
once!  Perhaps by changing your program around slightly you could be more
efficient?!?
         (SOFTDISK.INC [Bryan Zak], CAT19, TOP7, MSG16/M530)
 
>>>>>   Back in the early days, when all of the people interested in
"""""   writing GS compilers were looking at issues like stacks and memory
models, the issue of the stack size did come up.  I really though the stack
size limit of 64K on the GS, with a practical limit of more like 32K, was
way too severe.  We looked at two different alternatives:  one was having
the compilers support a "large stack" memory model allocated from main
memory that didn't use direct page addressing at all, and the other was
having the compilers automatically handle large structures by allocating
memory from main memory and keeping a pointer on the stack, at least as an
option.  I favored the later.  The folks from MegaMax insisted that the
stack size just wasn't a problem in practice, and that a very small amount
of thought would eliminate stack overflow problems in virtually any
program.

      Well, the folks from MegaMax prevailed, at least in part because all
of  the other solutions were hard and we were in a hurry to get tools out
to application developers.  We also realized that allocating large
structures from main memory could be added later without effecting existing
compilers or libraries.

      Looking back on the decision, I'm happy to say I was wrong.  Over the
years, it's been proven over and over that the folks from MegaMax were
completely correct.

Note 1:  If you don't know _how_ to reduce your use of stack space, say
         so.  It's not hard.  It does depend a little on the language 
         you're using, though, so you might ask in one of the product 
         categories, rather than a general programming area.

Note 2:  MegaMax did APW C.

Mike Westerfield
                 (BYTEWORKS, CAT19, TOP7, MSG17/M530)

<<<<<   >I really though the stack size limit of 64K on the GS, with a
"""""   >practical limit of more like 32K, was way too severe.

      No kidding! Although since MultiFinder was still a toy, and the only
other multitasking OS in general public use at the time was Unix, I suppose
the engineers didn't consider it important to add a single little register
(and a bit of comparator glue) that would map bank 0 to any bank of your
choice.

Here are some tips that work for C and Pascal:

   1) Never pass Strings as function/procedure parameters in Pascal.  
      Only pass _pointers_ (i.e., use VAR foo:string)

   2) Don't keep large strings or structures in local variable space. 
      Things like GSString255's are common transgressors of this rule; 
      it's really easy to malloc() or new() the string space, or in C 
      to make the varible 'static' (and thus in global memory space).  
      Note that large structures and strings aren't accessed any faster as 
      local variables, but that they _do_ affect other variable accesses 
      negatively (because the compilers have to generate special code to 
      "reach across" the 256-byte direct page.

   3) Follow your program's flow of execution, and add up the stack usage.
      Then use the #pragma stacksize directive to minimize it.  That way 
      you'll be guaranteeing best compatibility with things like The 
      Manager, Switch-It!, and GNO/ME.

   4) On an aside, Finder Extensions do _not_ need any stack! They share 
      the Finder's, which is 4K.  If you wrote an extension with pre-2.0 
      ORCA languages, recompile them immediately with the 2.0 versions and 
      make sure no stack segment is included in the OMF output.

 Jawaid
 (Someone who's sensitive to Bank 0 usage!)
                   (PROCYON.INC, CAT19, TOP7, MSG19/M530)



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

      After looking over all the topics, this was the best fitting place
for this (as far as I could tell...)

      A method of creating 640 mode rIcons (or icon source) suitable for
use with _ShowBootInfo, CDevs, Controls, etc.

Requires: 
  AWGS Paint module (or your favorite paint program) 
  HCGS (either version) 
  A Scrapbook type NDA 
  Genesys (if generating source)
  Almost any resource manipulator (if source isn't needed)

Procedure: 

   1) Launch the paint program and draw what you want for the icon. 
      Remeber that you have easy access to any fancy fonts, dingbat
      fonts, etc that you have installed.  (Use them, this is one of
      the reasons for using a paint program at this stage :) If you're
      using AWGS, careful use of the Group menu item can make "drop
      back and punt" operations much easier, radical use can make
      future editing a real bear. When you're happy with your work,
      save it to disk.  Now select your drawing using the Lasso tool. 
      C)opy it to the clipboard AND paste it into yout scrapbook (2 or
      3 pastes in the scrapbook can be a good idea as HCGS sometimes
      C)uts instead of C)opying) Quit the paint program.

   2) Launch HCGS and go to the Icon Editor stack.  Clear all paint,
      and paste your picture in.  Move it around as needed, in general
      follow normal icon editing practices for this stack.  When
      you're happy with the results, paste the final button into a
      temp stack.  Quit Hypercard.

   3) At this point, your icon exists as an rIcon resource in the temp
      HC stack.  If you don't want source for it, then simply copy the
      icon (using something like ResLin) to the program that will use
      it.  (Don't forget to set the rID and other attributes as may be
      required)

   4) If you do want/need source then launch Genesys and open your temp
      HC stack.  Export the desired icon to a temp file (I keep all my
      icons made in this manner in a single stack so I need to export
      the desired one in this manner) Close the stack file.  Open a
      New file, and import your temp resource file (don't forget,
      rIcon is rType $8001) Now you can generate source using
      whichever SCG you prefer.

      If the results need minor tweaking, just launch HCGS and edit the
icon pixel by pixel.  If you need to make wholesale changes to it, then go
back to step 1, but you have something to work from :)

      I know this seems like a round about method, but the results can be
well worth the effort, and some really nice effects can be created with a
minimum of effort by non-artsy types (like myself! :)
             (H.HISLOP [Harold], CAT10, TOP22, MSG:10/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.


             //////////////////////////// GEnie_QWIK_QUOTE ///
            /  "OK.  May take a few days to get through the /
           /  procrastination queue though."               /
          /////////////////////////////// A2PRO.TODDPW ////



[EOA]
[3DL]//////////////////////////////////////
       3D LOGO SEMINAR #2 RTC TRANSCRIPT /
/////////////////////////////////////////
Lists, Movies and Logo Magic
""""""""""""""""""""""""""""
By Nate Trost
[A2PRO.GELAMP]



THE BYTE WORKS HAS BEEN HOSTING LIVE SEMINARS   in the A2Pro RTC.  These 
"""""""""""""""""""""""""""""""""""""""""""""   seminars are for owners of
3D Logo, an amazing new language product from The Byte Works, Inc.  3D
Logo, which runs on the Apple IIgs, provides a stand-alone desktop
implementation of Logo.  In  addition to being a full version of Logo, 3D
Logo supports  movie creation, true 3D graphics, and much more.  This is
the transcript from the second seminar, held October 14th, 1993 in A2Pro.

<J.JOHNSON141>  How is HyperLogo coming?

<BYTEWORKS>     Great!  I was working on it today, and it's sliding into
                HyperStudio like a pig through a gate. I expect to finish
                next week if I don't hit any snags. I have some stuff
                prepared for tonight, but I'd like to wait until 15-20
                after to start on it.  Meanwhile, I'll answer any
                questions you have.

<D.PIERCE8>     We just got "Spring" today.

<J.JOHNSON141>  Same here, but I printed it out just before signing on.

<BYTEWORKS>     Any questions left over from last week, or from your own
                exploring?

<J.JOHNSON141>  I have one.

<D.PIERCE8>     Is it possible to make the spring a different shape in
                cross section?

<BYTEWORKS>     Sure.  In fact, there are two others I played with in the
                file:  :hex and :sq.

<D.PIERCE8>     I can see how to do most of it, but how do you alter
                Toptri?

<BYTEWORKS>     In DrawSpring, change the :tri to whatever shape you want
                to use. TopTri is a kludge specifically for the triangle
                cross section.  I wanted a "solid" look, with no hidden
                lines showing, so I only drew the front of the object. 
                TopTri is the kludge that draws the back of the object,
                too, but only for the top triangle.  For most uses of
                extrude, you would just draw the whole cross section.

<D.PIERCE8>     How can you do rings in Chemistry?

<BYTEWORKS>     You can't, without getting sort of fancy.  I would say the
                best way would be to create special "ring" procedures
                that will take atoms for input and draw them at the
                proper spots.  What the demo shows is a very simple
                model.  It doesn't even handle double bonds.  That's
                easier to add, but still not there yet.  And you only
                have 3 atoms.

                OK, let's get started.

                I wanted to start with a couple of refresher questions, then
                build up to the point where we can take the Extrude
                procedure apart.

                The first thing on the agenda is a quiz.  What would these
                statements do:

                Print First :lst Make "lst ButFirst :lst

<D.PIERCE8>     It would print what's first on the list then take that
                item off.

<BYTEWORKS>     Right.  Now, are you both familiar with the While, Not and
                EmptyP commands?

<D.PIERCE8>     No.

<J.JOHNSON141>  Help me with emptyp

<BYTEWORKS>     OK, let's step through them.
 
                While is a conditional loop, just like the while loops in
                many high-level languages.  It has the form
          
                WHILE condition [stuff]
        
                The condition is evaluated.  If it is true, the commands
                between the brackets (stuff) are executed, and the process
                repeats.  If condition is false, Logo moves on to the
                next statement.  EmptyP checks to see if a list is empty. 
                If so, it returns true. Not reverses the truth of the
                operand.  So, Not EmptyP is true if the list is Not
                empty. With me so far?

<D.PIERCE8>     When the list in "while" is not a list, what error
                message do you get?

<J.JOHNSON141>  Got it, but I thought emptyp was Employee Type

<BYTEWORKS>     Andy, I'd have to check to be 100% sure, but it probably
                would be "WHILE doesn't like <whatever> as input."

                Now let's put these to use.  These commands are used for
                the basic processing loop for all lists.  It's sort of
                the for loop of list processing languages.  I want you
                to write a line that will  process a list one element at
                a time, printing them one by one.  When you have your
                answer, go ahead and show us.

<D.PIERCE8>     While not emptyp :lst [print first :lst make "lst
                butfirst :lst]

<BYTEWORKS>     Andy/David get the gold star.  :)

<A2PRO.HELP>    WTG Guys!  :)

<BYTEWORKS>     Are you with us, Jimbo?  Shall we move on, or look at this
                again?

<J.JOHNSON141>  Got it, just hadn't pressed enter yet.

<[BYTEWORKS>    :)  OK, one more fact, and we're ready to tear into the 
                sample program.  Logo's Run command is really a sleeper. 
                It's this command that sets the list processing languages
                apart from the other, and invariably lead to them being
                interpreted.  The Run command executes whatever is inside
                of an input list as if it were a statement -- which it
                is.  The cool thing is that the Run command can work on
                data OR code -- in fact, Logo doesn't  really distinguish
                between the two.  So,  Run [fd 20 rt 60] does the same
                thing as fd 20 rt 60 That's 60% of the secret to Extrude.
                Do you both have a listing of the Spring program handy?

<J.JOHNSON141>  Yes.

<D.PIERCE8>     No.

<BYTEWORKS>     OK, let's take it from the top, then.  Here's the variable
                :tri that is actually  drawn to create the horizontal
                lines of the spring: Make "tri [[fd 40 rt 120] [fd 40 rt
                120] [pu fd 40 rt 120 pd]] Now, looking at that, and
                thinking about the Run command and our For loop, can you
                see how Draw could draw a shape from this?

<J.JOHNSON141>  Yep

<D.PIERCE8>     Yes

<BYTEWORKS>     :tri is really the shape to extrude.  You can use _any_
                shape.  Now, why not just draw it and be done with it?  

                Because we also need to draw some posts to connect the
                shapes.  And that's where begin able to break the shape
                up into individually executable segments comes in.  The
                loop that does most of the drawing is Ex_Draw, which does
                this: While Not EmptyP :shape [Run First :shape Ex_Post
                :dist Make "shape ButFirst :shape] Ex_Post is a
                subroutine that makes a turn in the direction we are
                extruding, and  draws a line the length of one extrusion.
                
                That, in a nutshell, is how Extrude works.  You can pass
                it any shape as a list of drawing commands.  It puts
                posts between the spots where you break your drawing
                commands into lists.  See?

<J.JOHNSON141>  Cool

<D.PIERCE8>     Yes

<BYTEWORKS>     From here, the Spring movie is just an exercise in
                Physics.  All you do is apply Newton's laws to drop the
                spring and make it rebound. That's a lot of stuff.  Let's
                open get your questions answered, now.  Fire when ready!

<J.JOHNSON141>  I'm not literate enough to have any!

<D.PIERCE8>     ]:)

<BYTEWORKS>     :)

<J.JOHNSON141>  Have to do too much interpretation of the abbreviations.
                But I've got the concepts.

<BYTEWORKS>     Which ones are you having trouble with, Jimbo?

<J.JOHNSON141>  RLR for instance.
                Thanks for putting the short names in the index however!

<BYTEWORKS>     RLR is short for RollRight.  The turtle stays pointed in
                the same direction, but turns clockwise.

<D.PIERCE8>     It seems clear now. We'll have to try it with
                different shapes.

<BYTEWORKS>     There's another thing you can try, too.  Instead of just
                trying  different shapes, try a different process using
                the same idea.  There are two very handy things to do
                with a set of points to make a solid object.  Extrude is
                one.  The other is Rotate, which creates a surface of
                rotation.  It would use about the same inputs, but
                instead of :dist for distance, you would use :angle for
                the amount to rotate.  To imagine how this would work,
                think of a half circle and rotate it 360 degrees. 
                Drawing lines, you will end up with something that looks
                like the latitude/longitude lines on a globe.  See how
                that would work?

<D.PIERCE8>     yes

<J.JOHNSON141>  yes

<BYTEWORKS>     OK, then, this is the challenge!  For the first level of
                accomplishment, and it's a really big level, create a
                procedure called Rotate that will do what we just talked
                about.  For an extra challenge, create a movie of a
                smoothly rotating coordinate grid using your procedure!

                If you take the challenge, be sure and upload the results
                into the library.

<D.PIERCE8>     Okay, but we have a disagreement about nomenclature.  The
                lines are not really latitudes, but longitude lines
                (great circles) from different poles.

<BYTEWORKS>     The line you would give as input would be a great circle. 
                The line that is created by the procedure as it rotates
                your points would be lines of latitude.  Agreed?

<D.PIERCE8>     yes

<BYTEWORKS>     Cool.  This is a great procedure for anything that can be
                created by rotation, them which is quite a lot:  glasses,
                pop cans, vases, table legs, balls, etc.  You see them
                used a lot in rendering programs. That's all I hoped to
                cover tonight.  An questions?  Comments?  Want hints
                about the program?  :)

<D.PIERCE8>     Question on procedure!  How do we upload a file to a
                library?  And which library? And do we address it to you?

<BYTEWORKS>     No, go ahead and put it in the public A2Pro library. 

                Uploading works pretty much like downloading.  The only
                big difference is that you need to set the software
                library first with the command by that name.  Once you
                set the library, choose the command to upload a file, and
                you're prompted through it.  I don't remember which
                library I've been using by number, but it's the when you
                set the one for "other languages," and GEnie will print
                the library when you set the library. If you have any
                trouble at all, ask in A2Pro. Also, be sure and attach a
                keyword of 3D Logo -- that way we can all find it!

<J.JOHNSON141>  Mike, is there any way to disable the text icon that
                Logo adds to the desktop?

<BYTEWORKS>     Which icon?

<J.JOHNSON141>  Every time I click on a text file, I get Logo.
                Did I install it wrong?

<BYTEWORKS>     :)  You'll have to edit the resource fork of Logo to get 
                rid of that, or convince Apple to implement priority
                levels.  Logo tells the Finder that it can handle a text
                file, but that it should NOT be a prime choice.

<D.PIERCE8>     I'll check that out on our system and see if we have
                the same problem.

<J.JOHNSON141>  All I've got is resedit.  How tough will it be?
                Rez/Derez

<BYTEWORKS>     You might check the library, too.  There may be some
                programs that will modify the Finder resources directly. 
                With a resource editor, it might be a little tough.

<J.JOHNSON141>  That's what I thought.  Luckily I still use old
                fashioned icons so I just keep deleting the desktop

<BYTEWORKS>     If you don't want Logo to create a desktop file at all, 
                you just have to pull out the entire resource.  That
                wouldn't be to tough.

<J.JOHNSON141>  What's next week's topic?

<BYTEWORKS>     Next week is movies.  I'm not sure what I'm going to use for
                an example, though.

                Any suggestions?

<J.JOHNSON141>  Are you planning anything about property lists?

<BYTEWORKS>     No.

<J.JOHNSON141>  Oh well.

<BYTEWORKS>     Well, we can always _talk_ about them!  :)  Bring some
                questions along, especially for the last lesson, which
                will be deliberately short.

<J.JOHNSON141>  I've got a mostly finished Monopoly game in SimpleScript
                I'm planning to convert I'll get my questions together.

<BYTEWORKS>     Cool.  I'll be interested to see it.

<J.JOHNSON141>  What happened to Bill.Lynn tonight?
                Did we get over his head?

<BYTEWORKS>     I'm not sure.    I think he's following things OK.  Other
                commitments or a memory like mine, I guess.  :)

<J.JOHNSON141>  I hear that.
 
                Well, thanks a lot Mike.  I need to spend some more time
                with Logo.

<D.PIERCE8>     Guess we'd better be going.  See you next week!

<BYTEWORKS>     OK.  We'll see you next week, Jimbo.

<J.JOHNSON141>  See you then.

<BYTEWORKS>     By Andy/David.  See you then.



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

      New this month!  ProDev, Inc. joins the companies supporting their
products here in A2Pro!  Be sure to stop by Category 35 to see what's going
on!



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

 From: ProDev, Inc.
 To: All Apple II programmers:
************************************************************
            _               _         ___
           | \             | \         |
           |_/evelopment & |_/ebugging |ool
************************************************************
  ---- Product Description ----

      The ProDev DDT is a program debugger on a peripheral card.  The DDT
contains the debugging software in ROM, has its own RAM and contains
hardware for watching the address bus, generating interrupts and program
timing.

  ---- The Hardware Edge ----

      The ProDev DDT has the normal features you find on most debuggers;
Tracing, break points, register and memory displays.  What makes the DDT
different is the addition of hardware.  The combination of software and
hardware makes it possible to provide features that ordinary software
debuggers can not.  For example:

     o  The DDT does not require any memory space.  This is especially
        important when trying to debug programs on the Apple //e.  Many
        times your program is too large to allow room for a
        conventional debugger.  You can even trace programs that run in
        text RAM memory.

     o  The ability to do a "Break on Address" that watches every
        address in real-time and interrupts the running program when
        the specified address appears.  This allows you to find those
        nasty bugs that cause part of your program to be mysteriously
        overwritten.  It also works as a real time breakpoint for ROM
        code.

     o  Pressing a button to interrupt a program.  Now you can see where
        your program went when it got lost.

     o  Counting the number of clock cycles required to run your
        program between two addresses you specify.

  ---- Other Goodies ----

      Connect a terminal or printer to your computer and view your 
programs output and the DDT output at the same time.  The DDT talks to 
the terminal via the Apple IIGS serial port or a super serial card.  As
you trace your program the memory location that each instruction uses is
calculated and displayed.

  ---- Main Screen ----
      The following is an example of the main screen display of the DDT8: 
(formatted for full 80-column display--Ed).
 
 ---------------------------- top of screen ----------------------------------
                                        | M = STK REA WRI LNG BNK PG2 80S CXR
 :PC=800                                |     mne mne mne rom  2  off off on
                                        |
 :DR                                    | KEY BRK TYP SAV TXT MIX HGR 80C ALT
 A=00 X=00 Y=00 S=E0 M=09 L=0 P=--1---Z-| 93  out C02 on  on  off off off off
 00/800:4C FF FB    JMP FBFF  {00FBFF   |---memory-------breakpoints----stack-
                                        |00/0024:00 @ | H             |01E2:01
 :TR                                    |00/0000:4C L | I00/FBFF.0001 |01E1:E2
 ** BREAK **                            |00/0000:4C L |               |01E0:9A
 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L |               |01DF:79
 00/FBFF:B0 EF       BCS FBF0 {-11}     |00/0000:4C L |               |01DE:00
 T:                                     |00/0000:4C L |               |01DD:FC
 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L |               |01DC:53
 00/FC01:A8          TAY                |00/0000:4C L |               |01DB:00
 T:                                     |00/0000:4C L |               |01DA:FC
 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/0000:4C L |               |01D9:53
 00/FC02:10 EC       BPL FBF0 {-14}     |00/0000:4C L |               |01D8:EA
 T:                                     |00/0000:4C L |npt----range---|01D7:00
 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|--eff-adrs---|  00/0000.0000 |01D6:FE
 00/FBF0:A4 24       LDY 24 {000024     |00/07CE:B5 5 |  00/0000.0000 |01D5:F7
 T:                                     |00/07CF:A0   |  00/0000.0000 |01D4:43
 A=00 X=00 Y=00 S=D8 M=09 L=0 P=--1---Z-|00/07D0:A0  <|  00/0000.0000 |01D3:30
 00/FBF2:91 28       STA (28),Y {0007D0 |00/07D1:A0   |  00/0000.0000 |01D2:7D
 T:                                     |00/07D2:A0   |  00/0000.0000 |01D1:F5
----------------------------bottom of screen---------------------------------
The left window displays the instructions as they are traced.
 
The top right window shows the state of various switches.

The "memory" window allows you to select 12 different memory locations to
monitor.

The "breakpoints" window displays the 10 most recently encountered break
points plus the one hardware break.
 
Next is the "stack" window which shows you the stack contents.

The "eff adrs" window displays the effective address of the next instruction
to be traced.
 
The "range" window allows you to enter address ranges where "No" access or
"Program only" access is permitted or a "Trace" range where real time
execution of subroutines will occur.

  ---- Ordering Information ----

      The retail price for either the DDT8 for the Apple //e or the DDT16 
for the Apple IIGS is $99 + $6 for 2nd day air shipping in the 48 states.
Canadian orders shipped via UPS ground.  Visa & MasterCard accepted.  For
security and speed please place all credit card orders by voice phone
only. 

      If you have any questions or comments please contact me at one of
the following addresses:
                      PRODEV            Genie
                      PRODEV            America Online
                      ProDev, Inc.      US Snail
                      PO Box 162
                      LaSalle, MI
                             48145-0162
                      (313) 848-4012    Voice
 Sincerely,
 Chuck Kelly
 President
                 (PRODEV [Chuck], CAT35, TOP1, MSG2/M530)

<<<<<   The DDT16 sounds incredible!  I have a few questions before I
"""""   call up and order it.

 1)  I own and use an Apple //c and an Apple //gs.  Obviously the DDT8 nor
     the DDT16 will work on my //c because there is no place to plug in a 
     card.  I don't own a //e so that leaves that option out.  The question 
     that I have is this:  Will the DDT16 running on my //gs debug and trace 
     8-bit software?  I now develop 8-bit software on my //gs for use on 
     Apple II's.  Please let me know if the DDT16 is limited to 16-bit 
     software debugging only.

 2)  Will there be a problem with using my ZipGS 10Mhz accelerator card?  I
     know that you said to set the slot that the accelerator is in to SLOW, 
     but I just wanted to ask to confirm this.

 3)  I use Merlin 8/16+.  Does the DDT16 support Merlin?  Or is the
     debugging software/hardware not compiler sensitive?

 4)  What days and hours can I call and place my order?

 Thank you for your time in answering my questions.
              (R.NIELSON1 [Russ!], CAT35, TOP1, MSG4/M530)

>>>>>   Great questions Russ.  Hear are some equally great answers, I 
"""""   hope.  Yes, the DDT16 will debug 8-bit code on the IIGS.  I do 
it all the time.  Of course if the code won't run on a IIGS, for example
it used aux RAM banks of a RamWorks card, then you would not be able to
fully debug it on a IIGS.

      No problem with the ZipGS as long as the slot of the DDT16 is set to
slow or the entire Zip is set to slow.  You can also use the DDT16 with the
Zip enabled if you want to use breakpoints only and you can live with the
breakpoints stopping your program several instructions after where they are
placed.

      As far as languages are concerned the debugger doesn't care.  It just
treats everything as machine code.  No source level debugging is done.  The
source code for the DDT16 is written in Merlin 16+. If you want to make
modifications to the source then being a Merlin user makes it easier.

      Our office hours are very crazy.  Your best bet for talking to a real
person is to call Tues. or Thurs. between 3pm and 8pm EST or Friday all
day.  You can also order via Email.  Be sure to include you complete credit
card number (Visa or MasterCard) with expiration date and the name that
appears on the card.

     Let me know if you have any more questions.

Chuck

     P.S. If you order by email please direct your mail to PRODEV. Never
post your credit card number in here. But you already knew that didn't you.
              (PRODEV [Chuck], CAT35, TOP1, MSG6/M530)



                      >>> NEWS FROM PROCYON INC. <<<
                      """"""""""""""""""""""""""""""

REXIT() AND GNO/ME 2.0   Evidently I forgot to include rexit() in the
""""""""""""""""""""""   library.  Actually, it's rexit(exitcode) 
(not just 3).

      The code is pretty small, so I'll post it here in just a bit.  Note 
that it only works with ORCA/C 2.0 or greater.

      For the absolute best results, this code should be written in 
assembly to avoid all the overhead of starting up the ORCA/C stdio and
malloc() packages (which is fairly formidable).  Maybe Mike W. will have
a suggestion on working around that while still using C?

Here's the rexit() code (you can include it in your program).

 rexit(int x_code)
 {
     SYSTEMQUITFLAGS(0x4000);
     SYSTEMQUITPATH(NULL);
     exit(x_code);
 }

 Jawaid
              (PROCYON.INC, CAT30, TOP2, MSG158-159/M530)


GNO UPDATES AVAILABLE IN A2PRO   If you're a registered GNO owner send me
""""""""""""""""""""""""""""""   email and you'll be given access to the 
new library just for registered GNO owners!  Kernel updates, and other
juicy tidbits will appear in this library from time to time.

      In fact, the GNO 2.0.2 update is there now in Library #41.  So get 
that email flowing!

Jawaid
                (PROCYON.INC, CAT30, TOP5, MSG34/M530)



                   >>> NEWS FROM SOFTDISK PUBLISHING <<<
                   """""""""""""""""""""""""""""""""""""               

PUBLISHING RIGHTS AND SOFTDISK   I have a few specific questions about
""""""""""""""""""""""""""""""   programs published by Softdisk:

   1.  Do you work like a paper magazine, buying "first North American
       printing rights," or does Softdisk purchase all rights to a program?

   2.  If there is an opportunity to publish a program commercially at some
       point in the future, either individiually or in a collection, how is
       this handled?  In other words, if Softdisk is buying more than the
       first rights, who decides when and how a program is released later,
       and is the author compensated in any way?

   3.  Can the same program be submitted multiple times on different
       platforms?  Specifically, can I submit the same program both as a
       GS and a Mac program, and assuming it is accepted for both
       publications, get paid twice?

Mike Westerfield
                  (BYTEWORKS, CAT31, TOP2, MSG38/M530)

>>>>>   Generally we purchase all rights to the program.  Although, the
"""""   submitter does retain the right to create new and original programs
using the technology.  And, as there always is, there have been exceptions.

 > If there is an opportunity to publish a program commercially

      The standard contract gives us all future rights, but there have been
special cases.  This is really new territory for us since we are just now
moving into the standalone market.  We even hired a temp to do the research
on old contracts to see what we could and couldn't sell as a standalone
without having to contact the original author.

> Can the same program be submitted multiple times on different
> platforms?

      Yes, and you can be paid twice, but the amounts may not necessarily
be the same since different platforms have different budgets, needs, etc.

      Also, the contract gives us the right to port submissions to other
platforms, but some submitters have asked for "first right of refusal"
clauses for this kind of thing.

      In reality, every submission and submitter is handled a little
differently from every other submission and submitter.  Lee pretty much
takes these things on a case by case basis.
           (SOFTDISK.INC [Bryan Zak], CAT31, TOP2, MSG39/M530)


GSLIB DISCUSSION   Well, GSHK sure did a great job compressing GSLib! 
""""""""""""""""   Only a 15 minute d/l! Another 15 minutes for the docs!
But I'm going to have to find someone who has a Mac to read them...having
them in MicroSoft Word format isn't bad, I can always use ShadowWrite to
extract the ASCII and leave out the garbage, but I'll have to use a Mac to
unpack it...GSHK can't handle the .SIT archive...did you try to archive a
folder by any chance?  I don't think GSHK can unarchive stuff in folders in
.SIT archives. :(  In any case a single item, "documentation", shows up
dimmed so I'll have to borrow someone's Mac...maybe I can use one at
school...

      BTW, can I just copy lines out of the MPW IIgs Pascal interface file
and put them in my ORCA/Pascal programs?  What's the difference between MPW
and ORCA/Pascal when it comes to the interface?
           (T.BUCHHEIM [ Tim pi ], CAT31, TOP9, MSG86/M530)

>>>>>   Yeah, I accidently archived the documentation as a single folder,
"""""   I'll be sure not to do that in the future.  I didn't use GSHK for
the documentation because for some reason it wouldn't compress my
"documentation" folder: it kept reporting fileNotFound errors.  Odd.

      It's been a while since I've used the Byte Works Pascal interfaces,
but some of the things to look for: Str255 vs pString, Ref vs UNIV LONGINT.
Those are the two biggest changes you may need to make.
          (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG87/M530)

<<<<<   By the way everyone, there IS a GSHK unpackable version of
"""""   the GSLib documentation in the library, it's file #3629.
The documentation is still in Microsoft Word (Mac) format though.
         (A2PRO.GELAMP [65-Nate-16], CAT31, TOP9, MSG102/M530)

>>>>>   In your announcement, you mention many 'C's but not ORCA/C.  When
"""""   I changed from APW to ORCA I had to recompile my own libraries
because the parameter passing methods of APWC and ORCA/C are incompatible.
Is this covered in the docs?
             (M.KLAPP [Michael], CAT31, TOP9, MSG89/M530)

<<<<<   There are two sets of C headers in the GSLib package: "GSLib.h"
"""""   and "GSLibKR.h".

      The former is an ASNI C style header, complete with prototypes.  The
latter is the ole K&R style headers.  The former is for use with ORCA C,
the latter with APW and MPW IIGS C.

      BTW: you shouldn't have had to recompile your libraries.  By using
the "pascal" directive before a function declaration all three C compilers
assume the same method of parameter passing.

      The one difference is error codes.  ORCA use the ToolError() function
(which uses the ~TOOLERROR library global) and APW/MPW IIGS uses a global
int: _toolErr.

      When using ORCA, all you need to do is link in GSLib.  If using an
Apple compiler (APW C, MPW IIGS C or MPW IIGS Pascal) you need to link in
two libraries:  GSLibAppleGlue and GSLib.  GSLibAppleGlue MUST link in
before GSLib - - it contains different glue code that stores errors in
_toolErr.
         (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG90/M530)

>>>>>   Does GSLib have routines that calculate to/from the relPitch
"""""   field in sampled sound resources?
        (A2PRO.GELAMP [65-Nate-16], CAT31, TOP9, MSG100/M530)

<<<<<   Yep, there are FreqToPitch and PitchToFreq routines.
"""""   The PitchToFreq uses the same code that the Sound control panel
uses and is pretty quick at what it does.

      The FreqToPitch uses SANE as I seem to recall (it's been a while
since I wrote these) and thus you need SANE active to use it.

Parameters are what you would expect: 
     freqOffset = PitchToFreq(relPitch);
          (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG101/M530)


MORE GSLIB COMING SOON   Ok, almost 30 people have download GSLib so far.
""""""""""""""""""""""   Any questions? problems? suggestions?
Not this week (we're mastering), but the week after I'll upload a new
revision of GSLib (a few bug fixes and about 15 new routines), a new
revision of the documentation (that can be processed by GSHK and contains
another 40 pages or so of docs, mostly on the Memory Manger portion);
and....

      Sample code!!!!  The first batch of sample code will be for an NDA, a
single window application and a multi-window application.  All of these
sources are in MPW IIGS Pascal.  This means it'll be very easy to read and
understand the source, but few people will be able to actually use it.

      Unfortunately, I just don't have the time to port the sample source
to ORCA/Pascal (at least not until ORCA/Pascal adopts the Apple
interfaces).  Any volunteers?
          (SOFTDISK.INC [Bryan Zak], CAT31, TOP9, MSG98/M530)



                   >>> NEWS FROM MORGAN DAVIS GROUP <<<
                   """"""""""""""""""""""""""""""""""""
  
DEBUGGING CUSTOM COMMUNICATIONS CODE   I've recently gotten Modemworks,
""""""""""""""""""""""""""""""""""""   in an effort to download stock
information from Dow Jones.  There are two sections on Dow Jones that I'm
interested in -- the Historical Data Section (where stock prices are listed
for about a year prior to today's date), and the Current Quotes section
(where the daily prices quotes are given.)

      After a little effort I've gotten my basic program to succesfully
log-on, go to the Historical section and download any and all data I want.

      I figured it was no big deal to just change a couple of lines to go
to the Daily Current quotes section to get the daily data.  -- Wrong.  Even
though I'm using very similar lines of the program, I get an "Out of Data"
message -- "Break in 690"

For Historical data I use:
        440  & WAIT FOR "VOL(100/S)"
        450  & CLEAR: FOR Y = 1 TO 12: & READ Q$(Y): NEXT Y

This works fine -- no problems.

For the Daily data I'm using:
        680  & WAIT FOR "VOL(100'S)"
        690  & CLEAR: FOR Y = 1 TO H2: & READ Q$(Y): NEXT Y

This keeps giving me the "Out of Data" message, with a Break in 690

      What could be causing this ??  (Yes, I know the "VOL(100/S)" is
different than the "VOL(100'S)" -- that heading is different on Dow Jones.
In both instances I have two files open, and in both instances I've used an
& IN# 0 to accept input only from the modem.  One works and the other
doesn't ??

      Any help would be appreciated.  Thanks.

Stan Sztaba
               (S.SZTABA, CAT32, TOP4, MSG20/M530)

>>>>>   Morgan will probably be along soon, but this message normally
"""""   applies to READ statements, which get their values from DATA
statements.  If you have ten DATA values and try to issue eleven READ
commands, this is the error you'll get.

      It leads me to believe that either ModemWorks doesn't see it as a
real &READ command and that Applesoft is looking for DATA statements, or
that ModemWorks returns the same error if it doesn't find as much data as
you're trying to read.

     Just guesses, though.

--Matt (Live programming help six nights a week!  We must be insane!)
        (M.DEATHERAGE [A2Pro Leader], CAT32, TOP4, MSG21/M530)

<<<<<   I think Matt is right.  Although AmperWorks' &READ statement is
"""""   has nothing to do with DATA items, if you accidentally left out the
& you would definitely get that error.  Check that line again and verify
that you have &READ and not just READ.  (For those who don't know, &READ is
AmperWorks' super-powerful "input anything" routine with fixed input
formatting, word wrap and other features).
              (MORGAN-DAVIS, CAT32, TOP4, MSG23/M530)



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

MISCLIB DISCUSSION   In using the MiscLibrary list manager calls, I am
""""""""""""""""""   confused by the AddMemRec statement that a "valid
handle" must be used.   What constitutes a valid handle?  Is a handle
within global variables considered valid?  How about a handle that is
within a record allocated by New( )?  Do I need to make a NewHandle( 0,
.....); call on either of these examples?  Both?  Again, my memory manager
ignorance is confusing me...  Arrrrgh.

 Rick
               (R.ADAMS48, CAT33, TOP7, MSG15/M530)

>>>>>   OK, what you need to to is call
"""""   NewHandle(0,MMStartUp(),attrNoPurge,NIL) to
get an empty handle.  This will be your list of memRecs.  When you're
through just call DisposeHandle on it and everything will go away
(unless you have handles to names references in your memRecs, in which
case you'll need to dispose of those too - an easy way to do this is to
allocate everything  with an auxiliary memory ID and then call
DisposeAll).  Let me know if this isn't clear or if you need more help. 
:-)
            (JWANKERL [Joe], CAT33, TOP7, MSG16/M530)



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

HYPERLOGO GS SHIPS!   Scripting HyperStudio for the Apple IIGS just took
"""""""""""""""""""   a giant leap forward!  HyperLogo for HyperStudio GS 
is now shipping.

      If you've been waiting for this new product, wait no more!  Add 3D
pictures and movies to your stacks.  Use Logo's powerful artificial
intellegence features to control your stacks.  With HyperLogo and Talking
Tools, you can even create stacks that read what you type!  It's all here
for the low introductory price of $50 plus shipping, or get HyperLogo and
3D Logo, our stand-alone version for just $85.  These programs will cost
$95 after the introductory special expires, so don't wait!

      If you ordered HyperLogo when 3D Logo started to ship, your wait is
over. All backorders have been shipped, and all should arrive by 22
November.

      If you would like more information, just ask... or send me your
mailing address by e-mail and I'll drop a complete information package in
the mail that describes all of our Logo products for the Apple IIGS.

Mike Westerfield
                 (BYTEWORKS, CAT36, TOP32, MSG79/M530)


ORCA/MODULA-2 SHIPS!   ORCA/Modula-2
""""""""""""""""""""   5 disks
                       Manual: 361 pages, index, table of contents

      ORCA/Modula-2 is here!  This is the language Niklaus Wirth, the
creator of Pascal, designed to replace Pascal.  Unlike Pascal, Modula-2 was
designed for the rough-and-tumble world of systems programming.  It has the
structure and safety of Pascal, but it also has the flexibility of C, plus
a few features you can't get in any other Apple IIGS language!

      Modula-2 is also surprisingly easy to learn.  Mike Westerfield,
creator of ORCA/Pascal, ORCA/C, APW, and ORCA/M says, "I wasn't sure I
wanted to learn a new language, either.  With Modula-2, though, I started
writing programs the first night, and I felt comfortable with the language
after just a few hours." What's the secret?  Quite simply, Modula-2 is a
lot like Pascal.  The overall structure and many of the reserved words are
the same, so anyone who knows Pascal can learn Modula-2 very quickly.  It's
also very easy to translate Pascal programs to Modula-2.

      But Modula-2 does more than Pascal.  Modules are an integral part of
Modula-2, unlike Pascal's units, which were added later.  Modula-2 gives
you more cross checking between modules -- and therefore fewer programming
errors -- than any other Apple IIGS language.

      Modula-2 also lets you get down to the bit and byte level.  Unlike
Pascal, Modula-2 is not designed to hide the implementation of the machine
itself.  You can write systems programs that deal with bits and bytes with
Modula-2, just like with C.

      And Modula-2 even supports concurrent programming.  On a single
processor computer like the Apple IIGS, this means you can write
multi-tasking programs without resorting to special operating systems or
assembly language.  If you want your program to work on two things at once,
just run a concurrent procedure, and it will!

      Of course, ORCA/Modula-2 comes with all of the advantages of an ORCA
language.  It works with all of the other ORCA languages, so you can use
libraries written in ORCA/C, ORCA/Pascal or ORCA/M.  ORCA/Modula-2 runs in
the standard ORCA development environment, too, and installs in the same
folder as your current ORCA languages.  And of course, you can use it with
tools from other companies that support the ORCA languages, too.

      So why buy now?  If you purchase ORCA/Modula-2 during the
introductory period, you can buy it for just half of the list price of $150
-- you save $75!  And if you buy ORCA/Modula-2 from this online offer
before  December 15th, you save us the trouble of sending you a mailing to
announce the product, so we'll even give you free shipping in the U.S.,  or
$5 off of shipping anywhere in the world.  It's a great way to get the
language Niklaus Wirth designed to replace Pascal and compete with C, and
support the Apple IIGS!
                (BYTEWORKS, CAT36, TOP13, MSG2/M530)


ONLINE ORCA/MODULA-2 SEMINARS?   Interested in online seminars or courses
""""""""""""""""""""""""""""""   about Modula-2?  Tell me what you want to 
see, even if someone else has already posted the same thing. If enough
people are interested (10-15 is best), We'll get a seminar or course
together.

Mike Westerfield

                (BYTEWORKS, CAT36, TOP13, MSG3/M530)


NEW BYTE WORKS PRODUCT IDEA   Inquiring minds want to know.  :)  I'd like
"""""""""""""""""""""""""""   to find out if there would be any interest in
disks of source code and data bases for use with the ORCA languages.

      In general, what I have in mind is public domain or inexpensive
source code and data base files.  Each would be provided on a disk, on an
as-is basis.  I would check to make sure the code compiled under the
current version of the ORCA software, but this would not be expected to be
commercial quality code.  Some code, in fact, might just be useful
subroutines, like b-trees.  Disks would be full, and low cost -- probably
about $10 each.

      If you would be interested in source code published this way, please
post a message.  If you like, tell me what sort of stuff you'd like to see
available.

      If you have source code you would like to see distributed this way,
post here to let me know.  I would pay royalties if you like, but I don't
see this as a major revenue earner, and frankly, royalties might not be
worth a stamp when you consider that it might need to be prorated, and the
cost would be very low.

     So why would I do this?

   1.  I'd like to see sample code for a variety of tasts more readily
       available to Apple IIGS programmers, especially those who don't 
       have access to an online service.

   2.  I'd like to make some money.  :)  It ain't much, but every little 
       bit counts.

Mike Westerfield
                  (BYTEWORKS, CAT36, TOP3, MSG54/M530)


ORCA/C 2.0.1 BUG FIX   If you are using varargs in C, check out library
""""""""""""""""""""   file 3608.  It's a fix to the varargs problem in
ORCA/C 2.0.1.  Thanks to Doug Gwyn for tracking it down!

Mike Westerfield
                 (BYTEWORKS, CAT36, TOP11, MSG67/M530)


ORCA LINKER PROBLEMS   I'm having problems with the ORCA/Linker being
""""""""""""""""""""   rather un-cooperative.
Whenever I try to compile/link this ONE program (via CMPL), the Compiler
works fine, but the Linker errors out at the end of the link process:

 >Pass 1: ......................................
 >Pass 2: ....................................
 >
 >Error at 00000028 past ~MOVESTRING PC = 00001152 : Unresolved reference
    Label: ~MOVE
 >..
 >1 error found during link
 >8 was the highest error level

(Note: there is no "MoveString" or "Move" function/procedure in the
source)

      This is a simple, little Pascal program (one load segment) that will
be implemented as a Finder Extension.  Other than the $RTL directive to
make it work, this program contains NOTHING unusual.

      Not only have I gone through the source code several times looking
for potential problems, I've tried re-installing ORCA, and shift-booting to
eliminate any possible system problems, all to no avail.

      My system consists of ORCA/Shell 2.0.2, ORCA/Pascal 1.4.1, and
ORCA/Linker 2.0.1, running under System 6.0.1 on a ROM 03 IIgs.

     Any suggestions on this?  Thanks in advance. :)
           (SNAKEBYTES [Greg B.], CAT36, TOP17, MSG62/M530)
 
>>>>>   What is the order of your libraries folder?  It should be
"""""   alphabetical.
         (SOFTDISK.INC [Bryan Zak], CAT36, TOP17, MSG63/M530)

<<<<<   Yup.  That did it. :)
"""""   Somewhere along the line the Pascal and Rez language files got
switched around, along with my hard drive getting VERY messed up.

     Good ol' Copy II Plus and Salvation/Deliverance saved the day...AGAIN.

     Now if I could just figure how to put back all the hair I pulled out. ;)

           (SNAKEBYTES [Greg B.], CAT36, TOP17, MSG64/M530)


USING LIBRARIES   I want my program to use the library I have set up.  Do
"""""""""""""""   I have to put the lib file in the library dir, and the 
.int file in the Pasdef dir?

      I read in the manual that the pascal compiler will look in the same 
file as the source, but I can't seem to get this to work.

     Any thoughts would be helpful...

  Ken "KAZ" Kazinski
                 (K.KAZINSKI, CAT36, TOP20, MSG21/M530)


<<<<<   Kaz, there are a number of things you must do, and others you can
"""""   do, to use your library.

      The LIB file should be put into the library folder.  That's not the
only way to make it work, but it's the best.  In general, you should
organize the library folder so your library file comes first, and all of
ours are in alphabetical order.

      The .int file can go in 13:ORCAPascalDefs or in the local directory.
You can even put it somewhere else, but that requires a directive in all of
your source.  If you are using a pre-2.0 version of the compiler, you'll
need to put the .int file in 13:ORCAPascalDefs if you don't want to use a
directive in all of your source.

      If you're having trouble, you might want to get back with details
about the actual problem.

Mike Westerfield
                 (BYTEWORKS, CAT36, TOP20, MSG22/M530)


PRIZM DEBUGGING   I need some with ORCA/Pascal/Prizm (v2.0.2).  How can I
"""""""""""""""   get the compiler to display the variable itself, of a
procedure, and not its location in the variables window.   Also, I want to
follow the values that are assigned to an array.  I tried to enter each
element of the array individually, in the variables window, but I'm alerted
that "No variable by that name exists in the subroutine".  I've searched
through the manual, but to no avail (For me anyways).

 William

                (W.RASCHER, CAT36, TOP19, MSG66/M530)

>>>>>   In any case where you see a location, you're looking at a
"""""   pointer.  As long as the pointer points to something the debugger
can display, you can see the value by dereferencing the pointer, as in
ptr^.

      You should be able to see the value of any array element by typing it
with constant subscripts, as in a[4,5].

Mike Westerfield
                 (BYTEWORKS, CAT36, TOP19, MSG67/M530)



[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 - July, 1990 - File #3391  (ESC.9007.BXY) <<
        """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""

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.9007/
 ..READ.ME            Intro and Welcome
 ..General/
 ....VaporWare        Murphy Sewall's industry snapshot and rumor mill
 ..Classic.Apples/
 ....README.8         Description of 8-bit contents!
 ....MDBASIC.REVIEW   SUPPOSED to be a review of MDBASIC (it's empty)
 ....BBASIC/          (X) Demo of Blankenship BASIC
 ....SUPER.SELECTOR/  (XD) Neat P8 program selector!
 ....LASER.BATTLE/    (XD) Lores arcade game in Applesoft (& some assembly)
 ....SPEECH.RECOG/    (SXA) Hardware project to give ears to your ][
 ..IIgs.Stuff/
 ....IN.THIS.FOLDER   Description of 16-bit contents!
 ....Copy.cmd/        (XD) Zak's Copy command (v1.0d2.03)
 ....CDAs/            (XD) ASCII.TABLE - Does this really need explanation?
                           SFSHOWINVISIBLE - Enables/disables the display
                               of invisible files in Standard File dialogs
 ....Articles/
 ......SouthPaw/      (SXA) How to patch tool vectors to change the cursor
                            Also compares the APW and MPW assemblers
 ......S.Lepisto.JUL/ (SXA) Illusions of Motion 3
 ....CoDD/            (SXD) Console Driver Demo - How to access .Console
 ..IF.GUIDE.DEMO/     (XD) Demo of Shem the Penman's Guide to writing
                           Interactive Fiction!
 ..DLT8.Source/       (S) How the 8-bit Display/Launcher Thingamajig works!
 ..Extras/
 ....BANKSWITCH/      (S) How to access extra banks of memory on ZRam cards
 ....ZBASIC/
 ......MT.DESK.NO.MOUS(S) ProTools Text Desktop - A desktop done with
                          mousetext!
 ......DRAW.POLY.SAM  (S) How to draw polygons with an arbitrary # of sides
 ....IIgs/            (S) RezWind - demonstrates how to bypass a bug that
                          USED to exist in the system software
 ..MT.DESK.DEMO       (X) The executable version of the ProTools Text
                          Desktop


Check out the article on speech recognition!  David Gauger explains how to
extend the hardware of your Apple ][ to listen to your voice and accept
verbal commands!

Also in this issue is Stephen Lepisto's concluding article in his series on
animation.  In it he explains how to animate objects who's appearance
changes as they move.

Included with this issue is something that personally helped me understand
the console driver. Bryan Pietrzak's Console Driver Demo (CoDD) will show
you just how simple it can be to transfer information between your program
and the user.

And a little comic relief:
 Two MS-DOS programmers were trying to fix a broken tail light on their
 car.  One stood behind it while the driver activated the turn signal.
   "Does it work?", asked the driver.
   "Yes", answered his helper, "No, yes, no, yes, no..."
(from Guy Kawasaki's book, "The Macintosh Way" (and also in this issue))



       >> 8/16-Central - August, 1990 - File #3392  (ESC.9008.BXY) <<
       """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


 /ES.CENTRAL.9008/
 ..READ.ME            Intro and Welcome
 ..GENERAL/
 ....PUBLISHER.S.PEN  Editor's editorial  :)
 ....VAPORWARE        Murphy Sewall's industry snapshot
 ..CLASSIC.APPLES/
 ....READ.ME8         Description of 8-bit contents!
 ....GENERIC/         (SA) Generic SYS file startup code (Merlin assembly)
 ....ZBASIC.ZEALOT/   (SA) Using LOCAL variables in ZBASIC!  Also, how to
                           set the length of a file on disk from ZBASIC
 ....UNIFORTH/        (XD) Public-domain implementation of Forth
 ..IIGS/
 ....README.16        Description of 16-bit contents!
 ....ARTICLES/
 ......MULTIBANK/     (SA) Apply monitor commands to multiple memory banks
 ......KBD.LIGHTS/    (SXA) Extended keyboards - how to recognise extended
                            keys in your programs and make the lights
                            (Caps, Shift & Scroll lock) work.
 ......EXT.CONTROLS/  (SA) The ins and outs of using controls created with
                           _NewControl2
 ....NIFTY.LIST.3.0/  (XD) Dave Lyon's VERY useful programmer's CDA


A few files are missing from this issue and I thought I should point them
out (before they get pointed out to me [grin]).  DACDevInit.txt and
DebugTips are listed in the README.16 file but aren't actually on the disk.
Also, the configure program for Doni Grande's extended keyboard article
KBD.LIGHTS was missing, and though it was promised for the next issue, I
checked and it wasn't there either.

Anyone interested in using Forth?  UniForth is a complete public-domain
implementation and will let you experience the truly bizarre mental
activity that goes with programming in Forth.

NiftyList is a MUST have IIGS programmer's utility packaged as a CDA.  It
will let you examine the insides of your machine in at least fifteen
different ways, let you trace through executable code, set a few different
kinds of breakpoints and even execute toolbox calls interactively!  There
are more features, but I can't go into them here or this'd be a VERY long
Tour. Just do it.

If you decide not to get NiftyList (why?), one of the articles this month
(MULTIBANK) shows you how to make your monitor commands apply to multiple
banks of memory.  So now you can search your entire memory space instead of
just one bank at a time.



[EOA]
[LIB]//////////////////////////////
             LIBRARY BIT BONANZA /
/////////////////////////////////
HOT Files You Can Download
""""""""""""""""""""""""""
By Nate Trost
    [A2PRO.GELAMP]



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

File #3618:  STDARG.BXY  (GS)
Uploaded on 11/1/93 by BYTEWORKS
About 2K (d/l time approx. 20 seconds @ 2400 baud)

      Here's a fix for the vararg problem in ORCA/C 2.0.1.  The problem is
caused by tighter error checking for casts, but that broke the old
stdarg.h.  Doug Gwyn provided this alternative, along with a varargs.h that
may be useful when proting non-ANSI C code.


File #3615:  APPIICAT2.8.BXY  (ALL)
Uploaded on 11/1/93 by S.BEHRENS
About 45K (d/l time approx. 4 minutes @ 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.8.


File #3605:  3DLOGOMOVIE.BXY  (GS)
Uploaded on 10/26/93 by D.PIERCE8
About 1K (d/l time approx. 10 seconds @ 2400 baud)

      This is the source to create a movie of a sphere changing in several
ways to demonstrate 3D Logo for the seminar.



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

File #3617:  SEMINAR.3.BXY  (GS)
Uploaded on 11/1/93 by BYTEWORKS
About 7K (d/l time approx. 45 seconds @ 2400 baud)

      This is the transcript from the third 3D Logo seminar, held on
October 21, 1993.  Shrink-It version.


File #3616:  SEMINAR.3.TXT  (GS)
Uploaded on 11/1/93 by BYTEWORKS
About 14K (d/l time approx. 1 minute 30 seconds @ 2400 baud)

      This is the transcript from the third 3D Logo seminar, held on
October 21, 1993.  ASCII text (no compression).



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

File #3622:  W6.SRC.V2.3.BXY  (ALL)
Uploaded on 11/1/93 by KEN.GAGNE
About 105K (d/l time approx. 11 minutes @ 2400 baud)

      Source code for Warp Six BBS public domain version 2.3. Requires
Merlin 16 or Merlin 16+ to assemble. Includes XModem send/receive, YModem
send, and IIgs modem port driver written in assembly language that can keep
up with XModem 4K uploads at 19200 bps with LAPM and hardware handshaking
and supports up to 38400 bps.


File #3609:  HPSTATE.SRC.BXY  (GS)
Uploaded on 10/28/93 by FADDEN
About 3K (d/l time approx. 20 seconds @ 2400 baud)

      This is a short Orca/M assembly file that shows you how to use IPC
messages to turn HardPressed on and off.  Two routines, InactHP and
ReactHP, can be used to inactivate and later reactivate HardPressed from
within your programs.



                     >>> A2/A2Pro Special Files <<<
                     """"""""""""""""""""""""""""""

File #3624:  A2NDX9311DB.BXY  (ALL)
Uploaded on 11/3/93 by A2.BILL
About 16K (d/l time approx. 1 minute 30 seconds @ 2400 baud)

      An index of A2 RT categories and topics as of November 1, 1993, in
AppleWorks database (ADB) form.


File #3623:  A2NDX9311TX.BXY  (ALL)
Uploaded on 11/3/93 by A2.BILL
About 15K (d/l time approx. 1 minute 30 seconds @ 2400 baud)

      An index of A2 RT categories and topics as of November 1, 1993, in
plain text (ASCII) form.


File #3612:  OCT30LIBS.BXY  (ALL)
Uploaded on 10/31/93 by A2PRO.TODDPW
About 78K (d/l time approx. 8 minutes @ 2400 baud)

      This is an AppleWorks 3.0 database of the A2Pro libraries, converted
by the GECONV program and sorted by library number (and by file number
within each library).  This listing was taken on October 30th.



                  >>> Programming Info/Documentation <<<
                  """"""""""""""""""""""""""""""""""""""

File #3629:  GSLIB.DOCS.SIT  R1B  (GS)
Uploaded on 11/10/93 by A2PRO.GELAMP
About 176K (d/l time approx. 15 minutes @ 2400 baud)

      This is a reupload of the Release 1 GSLib docs.  The original upload,
file 3593, unarchives fine on the Macintosh but cannot be unpacked by GSHK.
This archive can be unpacked by GSHK 1.1, but it MUST be unpacked to a HFS
volume.  If you have a Mac you should download 3593 instead of this file.
Documentation files are in Microsoft Word format, reading with a generic
text editor is possible, but it gets a little messy.


File #3601:  ANSITXTSPEC.BXY  (ALL)
Uploaded on 10/24/93 by A2PRO.HELP
About 10K (d/l time approx. 1 minute @ 2400 baud)

      This is a collection of two text files designed to show how the IBM
ANSI driver can be used, and thus how a term program supporting the ANSI
standard should act.  It includes information on all of the colors, as well
as inverse, underline, bold, underline, and invisible.  Enjoy!



                         >>> GNO/ME Utilities <<<
                         """"""""""""""""""""""""

File #3637:  EDIT.BXY  (GS)
Uploaded on 11/14/93 by PROCYON.INC
About 10K (d/l time approx. 1 minute @ 2400 baud)

      This is a replacement for the built-in 'edit' command in GNO 2.0.
This command accepts multiple filenames; to use it, add the following
to your gshrc file:
alias edit /bin/edit


File #3636:  WYSETERMCAP.TXT  (GS)
Uploaded on 11/14/93 by PROCYON.INC
About 2K (d/l time approx. 20 seconds @ 2400 baud)

      This is termcap entries for Wyse terminals.  This will allow GNO
programs that support termcap to run properly with a Wyse terminal
connected to the IIgs.  It will not, however, allow the IIgs to emulate a
Wyse terminal.


File #3635:  CRON2.0.BXY  (GS)
Uploaded on 11/14/93 by PROCYON.INC
About 25K (d/l time approx. 2 minutes 30 seconds @ 2400 baud)

      cron lets you schedule processes to run at any time or times. This
can be used to do such things as fire up late-night GEnie sessions, wake
you up in the morning, or delete the contents of a temporary directory.


File #3613:  GETTTY2.0.3.BXY  (GS)
Uploaded on 10/31/93 by PROCYON.INC
About 33K (d/l time approx. 3 minutes @ 2400 baud)

      This is a new getty with a serious crashing bug fixed, and a new
feature that allows controlling the input line carrier detect is assumed to
be on.  If you've been experiencing wierd crashes with the multiuser system
get this file!



                      >>> A2 University Courses <<<
                      """""""""""""""""""""""""""""

File #3643:  LIST.LSSN1.BXY  (GS)
Uploaded on 11/18/93 by A2PRO.GREG
About 44K (d/l time approx. 4 minutes @ 2400 baud)

      This is the introduction and lesson 1 for the 'List Manager Tricks
and Secrets Course' taught by Bryan Pietrzak.


File #3642:  LIST.LSSN2.BXY  (GS)
Uploaded on 11/18/93 by A2PRO.GREG
About 20K (d/l time approx. 2 minutes @ 2400 baud)

      This is lesson 2 for the 'List Manager Tricks and Secrets Course'.


File #3644:  LIST.LSSN3.BXY  (GS)
Uploaded on 11/18/93 by A2PRO.GREG
About 55K (d/l time approx. 5 minutes @ 2400 baud)

      This is lesson 3 for the 'List Manager Tricks and Secrets Course'.  
It is the final lesson of the course.


                   >>> develop Programming Journal <<<
                   """""""""""""""""""""""""""""""""""

File #3651:  DEVELOP.5.6.BXY  (ALL)
Uploaded on 11/20/93 by M.DEATHERAGE
About 100K (d/l time approx. 10 minutes @ 2400 baud)

      This archive contains the Apple II content from issues #5 and #6 of
_develop_, the Apple Technical Journal.  Issue #5 contains 'Scanning from
ProDOS,' an article on how to use the Apple Scanner from ProDOS 8 by Matt
Gulick, complete with MPW IIgs sample source code.  Both issues also
contain Apple II Q&A.  The source code was archived from an HFS disk due to
file name restrictions.


File #3650:  DEVELOP.4.BXY  (ALL)
Uploaded on 11/20/93 by M.DEATHERAGE
About 89K (d/l time approx. 9 minutes @ 2400 baud)

      This archive contains the Apple II content of issue #4 of _develop_,
the Apple Technical Journal.  Issue #4 contains 'Driving to Print: An Apple
IIgs Printer Driver' by Matt Deatherage, which explains how to write an
Apple IIgs printer driver and comes with 'Picter,' source code in APW or
ORCA/M 1.x format for a fully-functional printer driver which saves
QuickDraw PICT files to disk.  Issue #4 also contains Apple II Q&A.


File #3649:  DEVELOP.3.BXY  (ALL)
Uploaded on 11/20/93 by M.DEATHERAGE
About 37K (d/l time approx. 4 minutes @ 2400 baud)

      This archive contains the Apple II content of issue #3 of _develop_,
the Apple Technical Journal.  Issue #3 contains Accessing CD-ROM Audio Data
by Eric Mueller (with source code in Merlin format) and Apple II Q&A.


File #3648:  DEVELOP.2.BXY  (ALL)
Uploaded on 11/20/93 by M.DEATHERAGE
About 19K (d/l time approx. 2 minutes @ 2400 baud)

      This archive contains the two Apple II articles (no source code)
from issue #2 of _develop_, the Apple Technical Journal.  Issue #2 contains
'Demystifying the GS/OS Cache' by Matt Deatherage, and Apple II Q&A.


File #3647:  DEVELOP.1.BXY  (ALL)
Uploaded on 11/20/93 by M.DEATHERAGE
About 100K (d/l time approx. 10 minutes @ 2400 baud)

      This file contains the Apple II content from issue #1 of _develop_,
the Apple Technical Journal.  Issue #1 contains the Apple II Development
Dynamo (8-bit MPW IIgs cross-development aids) by Eric Soldan, complete MPW
IIgs source code to Dynamo, and Apple II Q&A.



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

File #3652:  COPYFORK.BXY  1.3  (GS)
Uploaded on 11/20/93 by RICHARD.B
About 8K (d/l time approx. 1 minute @ 2400 baud)

      New version with diagnostic switch and a bug fix, copies either or
both forks of a file from the command box or linker.


File #3646:  EXPRESSUTIL.BXY  (GS)
Uploaded on 11/20/93 by RICHARD.B
About 60K (d/l time approx. 6 minutes @ 2400 baud)

      An Express print spooler spool file viewer, and the Express tech note
(in Word and ASCII formats).  Requires the Express print spooler from Seven
Hill Software Corp.


File #3620:  RESUTILS.BXY  (GS)
Uploaded on 11/1/93 by M.KLAPP
About 30K (d/l time approx. 3 minutes @ 2400 baud)

      Three ORCA utilities: HEXDUMP dumps either the data or resource fork,
RESCHECK reports the number of occurences and total size of a specific
resource type, RESCLEAN compacts a resource fork under 6.0.  This is a
reupload of an earlier upload.  A newline was added after the copyright
messages to improve readability.


File #3600:  RJBMERLINS.BXY  (GS)
Uploaded on 10/23/93 by RICHARD.B
About 57K (d/l time approx. 5 minutes @ 2400 baud)

      This file contains all my Merlin EXEs, conversion utilities, and
icons. The dates vary from 1986 through to 1993, but thought it about time
they were all uploaded in one file.


File #3599:  SETOPENMSG.BXY  (GS)
Uploaded on 10/23/93 by RICHARD.B
About 4K (d/l time approx. 30 seconds @ 2400 baud)

      Allows you to set the Message Center (sic) message type $0001 to any
number of pathnames (from a LNK file or OA-O) in Merlin-16+. If your
application supports the Message Center, you can now force it to load any
number of files when it starts up, instead of manually opening them each
time you want to do a quick test.



                    >>> A2Pro BB Message Archives <<<
                    """""""""""""""""""""""""""""""""

File #3653:  APPLESOFT1.BXY  (ALL)
Uploaded on 11/21/93 by A2PRO.GELAMP
About 50K (d/l time approx. 5 minutes @ 2400 baud)

      This file contains archived messages from the A2Pro Bulletin Board
Cat 9 Topic 7 'Applesoft BASIC help please!'


File #3654:  GNO.SHELL.BXY  (GS)
Uploaded on 11/21/93 by A2PRO.GELAMP
About 56K (d/l time approx. 5 minutes 30 seconds @ 2400 baud)

      This file contains archived messages from the A2Pro Bulletin Board
Cat 30 Topic 2 'The GNO Shell'


File #3655:  LUNAR.ALL.BXY  (GS)
Uploaded on 11/21/93 by A2PRO.GELAMP
About 52K (d/l time approx. 5 minutes @ 2400 baud)

      This file contains archived messages from the A2Pro Bulletin Board
All of the messages from the former Lunar Productions category are
contained in this archive.



[EOA]
[UDU]///////////////////////////////////////
                UTILITIES FROM DOWN UNDER /
//////////////////////////////////////////
Three Great IIgs Programming Utilities
""""""""""""""""""""""""""""""""""""""
By Nate Trost
    [A2PRO.GELAMP]



      Utilities can be a programmers best friend.  Having the right utility
can save hours of valuable time and energy and save precious sanity.
Australian programmer Richard Bennett has created three fantastic freeware
programming  utilities for the Apple IIgs: ResLin, Pixie andIPCSpy.  Below
we'll take a  look at what these utilities do and why they make great
additions to your  library.



                              >>> ResLin <<<
                              """""""""""""" 
                        (A2Pro Library File 3553)

      ResLin is a general purpose resource utility.  With ResLin you can
load the resources present in a file's resource fork and edit/view them.
When you load a file, all of its different resources are displayed in a
list.  You can edit rText, rPString, rCString, rVersion and rComment
resources.  ResLin can also view other resource types such as rIcons.  In
addition to providing editing and viewing capabilities for specific
resource types, ResLin also lets you manipulate any resource in several
different ways.  You can edit the name, type, ID and attributes of any
resource in the resource fork.

      ResLin offers several other handy features, such as the ability to
copy resources between files, import resources from the data fork of a
file, delete a file's resource fork, remove duplicate resources in a
resource fork, and compact a resource fork.  Although ResLin cannot edit
all resource types, it is expandible.

      ResLin supports external editor modules which allow you to edit
resource types not supported by the main ResLin program.  Programming
information for external modules is included with the ResLin program.
ResLin is an extremely useful utility which no IIgs programmer should be
without.


                             >>> Pixie <<<
                             """"""""""""" 
                       (A2Pro Library File 3567)

      Pixie is a powerful CDA with unique features that make it an
invaluable debugging aid. Pixie has numerous features for viewing the
contents of memory.  Pixie is not limited to simply viewing memory; it can
also display handle information, find memory ownership, view structures in
memory, and more.  With Pixie you can view structures like GrafPorts and
window records, as well as other toolbox data structures.  Pixie has
variables that keep track of information such as current GrafPort
locations, interrupt handlers, handle and ID lists, and other
frequently-used routines and locations.  Pixie even supports searching
memory for specific data and allows memory editing in the fashion of a disk
block editor.  Printing is also supported.  Like ResLin, Pixie can be
expanded with external modules.

      Although Pixie is a complicated tool, the effort required to learn
its use pays off in the time saved while tracking down difficult bugs.



                            >>> IPCSpy <<<
                            """"""""""""""
                       (A2Pro Library File 3566)

      Apple IIgs System Software 6.0 added a powerful new programming tool
to the Tool Locator, Inter Process Communication (IPC).  IPC gives
programmers a standard means for sending messages between routines and
programs.  Many programs, INITs, desk accessories, and portions of the
system software send and receive IPC messages.  With the large number of
IPC messages being sent around the system, a utility for monitoring IPC
traffic becomes essential for debugging and informational purposes.  IPCSpy
is such a utility.  IPCSpy is a CDA that allows you to take snapshots of
IPC activity and save them.

      Not only does IPCSpy capture the raw data, but it will format the
parameters according to IPC message templates making messages much easier
to decipher.  If you use IPC or are curious about how everything
communicates, IPCSpy is a great utility to have.



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



     A great new course has started at A2 University!  Programmer Bryan
Pietrzak of Softdisk Publishing has started an exciting new three-part A2U
course on the Apple IIgs List Manager.  If you've ever wanted to know
everything there is to know about the List Manager, be sure and download
the lessons!

      LESSON 1: #3643
      LESSON 2: #3642
      LESSON 3: #3644



                           >>> COURSE OUTLINE <<<
                           """"""""""""""""""""""

 11/14/93, Introduction:

      - Introduction
      - Course Outline
      - How I Plan to Teach This Course
      - Where to Find List Manager Documentation
      - Glossary of List Manager Terms

 11/21/93, Lesson 1: The Basics

      - Introduction
      - Coding a Static List Control
      - Handling Events in a List Control
      - Accessing a List's Member Records
      - Finding Out Which Members Are Selected
      - Select All and Select None
      - Sorting
      - Conclusion

 11/28/93, Lesson 2: Custom Lists

      - Introduction
      - Coding a Custom Static List Control
      - Custom List Drawing
      - Custom List Sorting
      - Conclusion

 12/5/93, Lesson 3: Dynamic Lists

       - Introduction
       - Keeping House For Dynamic Lists
       - Adding and Deleting Member Records
       - Changing a Member
       - Course Conclusion

      That's it folks, less than 7,000 words of text and less than 2,000 
lines of source and you'll be an expert on the List Manager!

 

[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

     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      [TIPPY.ONE]    IBM Staff Writer
                o David Holmes        [D.HOLMES14]   IBM Staff Writer
                o Don Lokke           [D.LOKKE]      Cartoonist

   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 Gina 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 1993  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]
