mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-06-17 06:29:29 +00:00
243 lines
9.9 KiB
C
243 lines
9.9 KiB
C
/*------------------------------------------------------------------------------
|
||
#
|
||
# Apple Macintosh Developer Technical Support
|
||
#
|
||
# MultiFinder-Aware TextEdit Sample Application
|
||
#
|
||
# TESample
|
||
#
|
||
# TESample.h - Rez and C Include Source
|
||
#
|
||
# Copyright © Apple Computer, Inc. 1989-1990
|
||
# All rights reserved.
|
||
#
|
||
# Versions:
|
||
# 1.00 08/88
|
||
# 1.01 11/88
|
||
# 1.02 04/89 MPW 3.1
|
||
# 1.03 02/90 MPW 3.2
|
||
#
|
||
# Components:
|
||
# TESample.c Feb. 1, 1990
|
||
# TESampleGlue.a Feb. 1, 1990
|
||
# TESample.r Feb. 1, 1990
|
||
# TESample.h Feb. 1, 1990
|
||
# TESample.make Feb. 1, 1990
|
||
#
|
||
# TESample is an example application that demonstrates how
|
||
# to initialize the commonly used toolbox managers, operate
|
||
# successfully under MultiFinder, handle desk accessories and
|
||
# create, grow, and zoom windows. The fundamental TextEdit
|
||
# toolbox calls and TextEdit autoscroll are demonstrated. It
|
||
# also shows how to create and maintain scrollbar controls.
|
||
#
|
||
# It does not by any means demonstrate all the techniques you
|
||
# need for a large application. In particular, Sample does not
|
||
# cover exception handling, multiple windows/documents,
|
||
# sophisticated memory management, printing, or undo. All of
|
||
# these are vital parts of a normal full-sized application.
|
||
#
|
||
# This application is an example of the form of a Macintosh
|
||
# application; it is NOT a template. It is NOT intended to be
|
||
# used as a foundation for the next world-class, best-selling,
|
||
# 600K application. A stick figure drawing of the human body may
|
||
# be a good example of the form for a painting, but that does not
|
||
# mean it should be used as the basis for the next Mona Lisa.
|
||
#
|
||
# We recommend that you review this program or Sample before
|
||
# beginning a new application. Sample is a simple app. which doesn’t
|
||
# use TextEdit or the Control Manager.
|
||
#
|
||
------------------------------------------------------------------------------*/
|
||
|
||
/* These #defines correspond to values in the Pascal source code.
|
||
TESample.c and TESample.r include this file. */
|
||
|
||
/* Determining an application's minimum size to request from MultiFinder depends
|
||
on many things, each of which can be unique to an application's function,
|
||
the anticipated environment, the developer's attitude of what constitutes
|
||
reasonable functionality and performance, etc. Here is a list of some things to
|
||
consider when determining the minimum size (and preferred size) for your
|
||
application. The list is pretty much in order of importance, but by no means
|
||
complete.
|
||
|
||
1. What is the minimum size needed to give almost 100 percent assurance
|
||
that the application won't crash because it ran out of memory? This
|
||
includes not only things that you do have direct control over such as
|
||
checking for NIL handles and pointers, but also things that some
|
||
feel are not so much under their control such as QuickDraw and the
|
||
Segment Loader.
|
||
|
||
2. What kind of performance can a user expect from the application when
|
||
it is running in the minimum memory configuration? Performance includes
|
||
not only speed in handling data, but also things like how many documents
|
||
can be opened, etc.
|
||
|
||
3. What are the typical sizes of scraps is [a boy dog] that a user might
|
||
wish to work with when lauching or switching to your application? If
|
||
the amount of memory is too small, the scrap may get lost [will have
|
||
to be shot]. This can be quite frustrating to the user.
|
||
|
||
4. The previous items have concentrated on topics that tend to cause an
|
||
increase in the minimum size to request from MultiFinder. On the flip
|
||
side, however, should be the consideration of what environments the
|
||
application may be running in. There may be a high probability that
|
||
many users with relatively small memory configurations will want to
|
||
avail themselves of your application. Or, many users might want to use it
|
||
while several other, possibly related/complementary applications are
|
||
running. If that is the case, it would be helpful to have a fairly
|
||
small minimum size.
|
||
|
||
What we did for TESample:
|
||
|
||
We determined the smallest heap size that TESample could have and still
|
||
run (22K). For the preferred size we added enough space to permit:
|
||
a. a maximum size TextEdit text handle (32000 characters)
|
||
b. a maximum usable TextEdit scrap (32000 characters)
|
||
b. a maximum scrap as a result of Copy (32000 characters)
|
||
d. a little performance cushion (see 2, above) (10K)
|
||
Result: 122K for preferred size
|
||
|
||
For the minimum size we took the 22K and then scaled down our requirements
|
||
for a,b, and c above. We thought that providing 16K more would be lean
|
||
and mean (see 4, above).
|
||
Result: 38K for minimum size
|
||
*/
|
||
|
||
#define kPrefSize 122
|
||
#define kMinSize 38
|
||
|
||
/* The following constants are used to identify menus and their items. The menu IDs
|
||
have an "m" prefix and the item numbers within each menu have an "i" prefix. */
|
||
#define mApple 128 /* Apple menu */
|
||
#define iAbout 1
|
||
|
||
#define mFile 129 /* File menu */
|
||
#define iNew 1
|
||
#define iClose 4
|
||
#define iQuit 12
|
||
|
||
#define mEdit 130 /* Edit menu */
|
||
#define iUndo 1
|
||
#define iCut 3
|
||
#define iCopy 4
|
||
#define iPaste 5
|
||
#define iClear 6
|
||
|
||
/* 1.01 - kTopLeft - This is for positioning the Disk Initialization dialogs. */
|
||
|
||
#define kDITop 0x0050
|
||
#define kDILeft 0x0070
|
||
|
||
/* 1.01 - changed constants to begin with 'k' for consistency, except for resource IDs */
|
||
/* kTextMargin is the number of pixels we leave blank at the edge of the window. */
|
||
#define kTextMargin 2
|
||
|
||
/* kMaxOpenDocuments is used to determine whether a new document can be opened
|
||
or created. We keep track of the number of open documents, and disable the
|
||
menu items that create a new document when the maximum is reached. If the
|
||
number of documents falls below the maximum, the items are enabled again. */
|
||
#define kMaxOpenDocuments 1
|
||
|
||
/* kMaxDocWidth is an arbitrary number used to specify the width of the TERec's
|
||
destination rectangle so that word wrap and horizontal scrolling can be
|
||
demonstrated. */
|
||
#define kMaxDocWidth 576
|
||
|
||
/* kMinDocDim is used to limit the minimum dimension of a window when GrowWindow
|
||
is called. */
|
||
#define kMinDocDim 64
|
||
|
||
/* kControlInvisible is used to 'turn off' controls (i.e., cause the control not
|
||
to be redrawn as a result of some Control Manager call such as SetCtlValue)
|
||
by being put into the contrlVis field of the record. kControlVisible is used
|
||
the same way to 'turn on' the control. */
|
||
#define kControlInvisible 0
|
||
#define kControlVisible 0xFF
|
||
|
||
/* kScrollbarAdjust and kScrollbarWidth are used in calculating
|
||
values for control positioning and sizing. */
|
||
#define kScrollbarWidth 16
|
||
#define kScrollbarAdjust (kScrollbarWidth - 1)
|
||
|
||
/* kScrollTweek compensates for off-by-one requirements of the scrollbars
|
||
to have borders coincide with the growbox. */
|
||
#define kScrollTweek 2
|
||
|
||
/* kCrChar is used to match with a carriage return when calculating the
|
||
number of lines in the TextEdit record. kDelChar is used to check for
|
||
delete in keyDowns. */
|
||
#define kCrChar 13
|
||
#define kDelChar 8
|
||
|
||
/* kButtonScroll is how many pixels to scroll horizontally when the button part
|
||
of the horizontal scrollbar is pressed. */
|
||
#define kButtonScroll 4
|
||
|
||
/* kMaxTELength is an arbitrary number used to limit the length of text in the TERec
|
||
so that various errors won't occur from too many characters in the text. */
|
||
#define kMaxTELength 32000
|
||
|
||
/* kSysEnvironsVersion is passed to SysEnvirons to tell it which version of the
|
||
SysEnvRec we understand. */
|
||
#define kSysEnvironsVersion 1
|
||
|
||
/* kOSEvent is the event number of the suspend/resume and mouse-moved events sent
|
||
by MultiFinder. Once we determine that an event is an OSEvent, we look at the
|
||
high byte of the message sent to determine which kind it is. To differentiate
|
||
suspend and resume events we check the resumeMask bit. */
|
||
#define kOSEvent app4Evt /* event used by MultiFinder */
|
||
#define kSuspendResumeMessage 1 /* high byte of suspend/resume event message */
|
||
#define kResumeMask 1 /* bit of message field for resume vs. suspend */
|
||
#define kMouseMovedMessage 0xFA /* high byte of mouse-moved event message */
|
||
#define kNoEvents 0 /* no events mask */
|
||
|
||
/* 1.01 - kMinHeap - This is the minimum result from the following
|
||
equation:
|
||
|
||
ORD(GetApplLimit) - ORD(ApplicZone)
|
||
|
||
for the application to run. It will insure that enough memory will
|
||
be around for reasonable-sized scraps, FKEYs, etc. to exist with the
|
||
application, and still give the application some 'breathing room'.
|
||
To derive this number, we ran under a MultiFinder partition that was
|
||
our requested minimum size, as given in the 'SIZE' resource. */
|
||
|
||
#define kMinHeap (29 * 1024)
|
||
|
||
/* 1.01 - kMinSpace - This is the minimum result from PurgeSpace, when called
|
||
at initialization time, for the application to run. This number acts
|
||
as a double-check to insure that there really is enough memory for the
|
||
application to run, including what has been taken up already by
|
||
pre-loaded resources, the scrap, code, and other sundry memory blocks. */
|
||
|
||
#define kMinSpace (20 * 1024)
|
||
|
||
/* kExtremeNeg and kExtremePos are used to set up wide open rectangles and regions. */
|
||
#define kExtremeNeg -32768
|
||
#define kExtremePos (32767 - 1) /* required to address an old region bug */
|
||
|
||
/* kTESlop provides some extra security when pre-flighting edit commands. */
|
||
#define kTESlop 1024
|
||
|
||
/* The following are indicies into STR# resources. */
|
||
#define eWrongMachine 1
|
||
#define eSmallSize 2
|
||
#define eNoMemory 3
|
||
#define eNoSpaceCut 4
|
||
#define eNoCut 5
|
||
#define eNoCopy 6
|
||
#define eExceedPaste 7
|
||
#define eNoSpacePaste 8
|
||
#define eNoWindow 9
|
||
#define eExceedChar 10
|
||
#define eNoPaste 11
|
||
|
||
#define rMenuBar 128 /* application's menu bar */
|
||
#define rAboutAlert 128 /* about alert */
|
||
#define rUserAlert 129 /* user error alert */
|
||
#define rDocWindow 128 /* application's window */
|
||
#define rVScroll 128 /* vertical scrollbar control */
|
||
#define rHScroll 129 /* horizontal scrollbar control */
|
||
#define kErrStrings 128 /* error string list */
|