[comp.sys.mac] Crunched Shell is now public domain

crunch@well.UUCP (John Draper) (01/05/89)

   Does anyone know the person who moderates the "comp.sys.mac.prog" newsgroup.
I would like to get the Crunched Shell Object oriented system out to the
world.

   Greg Dow wrote all of the code,  and I talked to him at the BMUG Developers
meeting tonight,  and he says that he is placing it into the public domain.

   The final copy will come from Greg,  and his Email address is posted below,
so you can ask him questions directly.    A description of the Crunched
shell follows:

NEWS RELEASE FROM THE PROGRAMMERRS NETWORK:
===========================================

  I met with Greg Dow,  and both of us have decided to place the LOW
LEVEL CORE of the Crunched Shell into the Public Domain.   This includes
26 source code modules,  A Resource file,  and all the appropriate 
headers,  and includes a DEMO program witn an implementation of Tear
Off menus,  and how to use it.   Greg currently has posession of the
code because he wants to add one thing,  and do some more QA testing
before publishing it.   

  I have absulutly NO idea when this will happen,  but be expecting it
to show up on one of the BMUG Disks soon,  and can be requested through
BMUG Berkeley Macintosh UserGroup.

  I don't know if posting something this big on the Networks would cause
nasty flames from the site administrations,  but I'm open for suggestions
on how to do it.   I suspect we might want to use Stuffit or Packit and
Kermit it??    How does one post things this large??

  The Crunched Shell is an implementation of an Object Oriented Programming
model built using standard C,  and follows some of the methodology outlined
in the last summers issue of Byte Magazine.   The description of the
Object classes described below are:

   CApplication - Main Application Object class.   Accepts the INIT, RUN
     and EXIT messages.   Also handles MouseMoved events,  and has
     built-in capability for cursor changes as the user moves it from
     view to View.
     
   CCheckBox - Macintosh Control Checkboxes.  Used in Dialogs,  and
     other User interfaces.
     
   CView - An area or portion of a window.   Windows can have many views,
     and this is the parent class of all other views listed below.
     The WIndow class accepts an ADDVIEW message,  which sends an
     INSTALL message to a view,  which adds it to the List of other
     views in a window.    See CWindow below for details on the
     Window view.
    
   CScrollView - A Scrolling View within a window.
     
   CConsoleView - A Console text output view,  for displaying outputted
     text within a window.
     
   CDebugger - A Special class used for displaying output,  showing entry
     into an Object dispatcher function,  the messages it recieved,
     and Exit from dispatcher.    Used for examination of the message
     flow.
     
   CError - A General Error handling function that handles Object handling,
     User defined,  Memory,  Resource manager,  file manager, and printer 
     errors.
     
   CFile - Parent class of ALL file classes.   Handles SFGetFile, SFPut
     file,  and all StdFile operations.   SubClasses of this class would
     handle Specific Application functions,  then call "SendSuper" to
     send Parent message to bring up StdFile Dialog boxes.   Instance
     variables are filled with informatin about the file selected by
     the user.
     
   CList - Handles LISTS of Objects.   For instance,  a Window containing
     an arbetrary number of Views,  would store the View classes in a
     List class.    Lists are good for Drawing objects,  or any time
     Multiple objects are use.
     
   CMenu - Menu class,  and sub-classes off this class handle Palettes
     Tearoffs,  or other custom designed menus.   Also keeps record of
     Last menu item used for THAT menu.
     
   CModelessDialog - Handles Modeless dialog,  also gives the programmer
     opportunitys to build "DoDialog" functions,  and leaves a number of
     hooks to treat Modeless Dialogs like windows.   It gives you 2 levels
     of control,  which makes the Dialog Manager almost manageable.
     
   CObject - Parent of ALL objects.   Handles INIT, CLONE, and DISPOSE
     functions that ALL classes inherit.
     
   COneLiner - A Sub class of a View.   Handles ONE LINE of text,  drawn
     in a window.   Used by the Debugger,  Console,  and text messages.
     
   CPrinter - Handles printing functions to any printer.
   
   CRadioButton - Handles radio buttons used in Dialog boxes,  Windows,
     etc.
     
   CScrollbar - Standard Mac Scroll bars.
   
   CWindow - Main Window Class.   Usually,  it isn't necessary to 
     make a sub-class,  because the window class makes NO assumptions
     on the particular application.    Windows come in 2 flavors:
     Floating,  and Standard.    Floating is good for Tool Palettes,
     or other cases where windows must remain active ALL the time.
     
   CWorkSet - Eliminates the necessity for Multiple Inheritance.   For
     instance a Text Editor would be a WorkSet class.   Usually,
     workSet classes get all their messages from Menu actions.   Each
     main application window is an instance of a WorkSet.
     
   There are 4 other modules containing the necessary subroutines,  and
an assembly Language implementation of "SendMsg" to reduce the time
penalty for dispatching messages.    Dispatcher functions can have
an arbitrary number of arguments.
   
   Also included is an MDEF,  and a WDEF used in the Tearoff Menu example.
Complete Source code included as a LightSpeed C Project.    Souce code
is WELL COMMENTED,  and at the top of each source file,  is a summary
of the Messages/Methods each Object can handle.

   The Crunched Shell is totally Multi-finder compatable and handles
resume and suspend events,  so when you "Shut down" the shell makes
it VERY EASY to close all files.     Also,  when inter-process
communication ever becomes real,  it would be very EASY to add
additional messages to the CApplication class.

   ALL of the Crunched Shell will be in Source code form,  including
the MDEF and WDEFs.   It's also very easy to have Dynamic Binding by
implementing Object classes as special code type resources,  that
can be read in as needed.

   All Crunched Shell object classes have private internal instance
variables,  and the Child class inherits ALL of the instance variables
maintained by the parent.

   I plan on releasing a number of products that support this particular
format that Greg has used in it's implementation.   

   Also included is 3 "Templates" for creating the necessary Object
Source file,  header file,  and Instance variable template headers.

   The Crunched Shell works on LightSpeed C Ver 2.1 or 3.0,  and Mac
system 6.0.   We are following the rules and guidelines imposed by Apple,
so there shouldn't be any future compatability problems.   It uses
either GetNextEvent or WaitNextEvent,  depending on system variables
provided by Apple.

   Hats off for Mr Greg Dow for doing such a fine job in this project.
and I hope that this might give others the inspiration to build on these
tools other classes for useful Mac Programming.

   I encourage every beginner to use it as an example of how to use the
Mac ToolBox.

   I have been using it for 6 months now,  and it has cut my development
time considerably.    I have a collection of about 75 Object classes in
addition to the ones listed above.   Perhaps I can get permission from 
my employer to release a few into the publis domain.   Plus I have added
Multiple Inheritance (Thanx to my Soviet friend who gave me a few "tricks")

John Draper - uunet!acad!well!crunch
Greg Dow    - apple!bmug!greg.dow