[comp.sys.mac] Windoid #2

keith@apple.UUCP (Keith Rollin) (10/19/87)

 
                                     WINDOID
 
                                    Issue  #2
 
                 The Publication for the Informed HyperCard User
                              Editor:  David Leffler
 
WINDOID provides an opportunity for its readers to contribute to the ongoing
growth and excellence of HyperCard.  With your assistance we can continue to
bring to HyperCard added depth and functionality.  In the back of every issue
will be a form for you to keep by your Macintosh.  This form will give you the
unique opportunity to be able to participate directly in the continued
development of HyperCard.
 
If you have a bug, suggestion, comment, or just want to know the best way to do
something in HyperCard, you can fill out the form and send it to:
 
AHUG c/o David Leffler,
Apple Computer, Inc.,
MS/27-AQ,
20525 Mariani Ave.,
Cupertino, CA 95014.
 
Or copy the format and AppleLink it to HYPERBUG$.
 
We will read all the forms returned and address questions that are being asked
by HyperCard users.  We will ask the team and provide you with an answer and
publish the answers in this newsletter.  In this way we can gather information
and provide for your needs in future versions of HyperCard.
 
WINDOID is trying to make a difference in the way that you work with HyperCard.
We need your input.  What sort of stacks are you using, what kinds of stacks
are you creating, and what are some of the joys and frustrations you are
experiencing.  We really want to know!
 
Bill and Dan are very receptive to user input and this is your chance to make a
difference in the world.
 
In this second issue of WINDOID, we have listened to those who have made a
contribution and have needed information.  In this issue we will address some
of the areas that people have questioned us about and talk in depth about
importing text files.
 
Many people have large amounts of data stored in text files.  They would like
to move this information into HyperCard stacks.  There are many ways to import
files, and we have included in this issue what we feel addresses most of your
needs.  We have sifted through the many different ways our users have needed to
import files, and we have chosen a few of the most simple and flexible.
 
This issue will deal with import button scripts, and in the next issue we will
deal with planning the stack and the Universal Import Button by Gary Bond.
 
 
                        Importing Text Into Hypercard
                                by Gary Bond
 
When importing text into HyperCard, you must consider how you want the text
appear. Should it fill a single field? Should it create new fields and new
cards for each imported text record? How much of a field should you fill with
text? Will it appear in scrolling fields? What kind of text will be imported?
These are all questions that need to be answered before you begin writing your
script. This article will explore the two kinds of text and answer some of
these questions.
 
Two Kinds of Text
 
For the most part, there are two types of text files. The first is the common
document file which is usually nothing more than a Macwrite or Microsoft Word
document saved as a text file. All of the characters in this kind of file are
usually in printable ASCII format.
 
The second kind of text file is sometimes generated by a database product such
as Omnis or 4th Dimension. This kind of file is broken down into two parts.
These parts are records (which are considered to be separate and distinct
groups of information) and fields (which are sub-units of information within
records). A record can contain several fields with each field capable of
holding a different kind of information. In a mailing list for example, each
person in the mailing list would be a record in the database while the
information about that person such as their name, address, city, state, and zip
would be fields of information within the individual records. Notice that each
record in this kind of file has the same number of fields.
 
Exploring Import Scripts
 
Below are some common scripts for reading and writing the first kind of text
file:
 
Simple read from a text file:
 
on mouseUp
     Open file filename
       Repeat
         Read from file filename for 16384 --fastest/most efficient read
         If it is empty then exit repeat --leave when out of characters
         Put it after var --continue to build a variable with incoming text
         --Could also put after a field but must respect the 32K field limit
       End repeat
     Close file filename
end mouseUp
 
Simple write to a text file:
 
on mouseUp
   Open file filename
     Write var to file filename
     --Ex: Write field fieldname to file filename
     --Ex: Write Msg to file filename
     --Ex: Write the selection to file filename
   Close file filename
end mouseUp
 
Simple append to a text file:
 
on mouseUp
  Open file filename
    Repeat -- Must read current file info then add new info and write it out.
       Read from file filename for 16384
       If it is empty then exit repeat
       Put it after var1
    End repeat
  Put var2 & return after var1
  Write var1 to file filename
  Close file filename
end mouseUp
 
When dealing with the second type of text file, it's necessary to get a little
tricky. First of all, to maintain the flavor of the original file, we have to
do a little planning.
 
In examining the available list of objects in HyperCard, it becomes obvious
that a card would make a perfect record. In our mailing list example, each card
could represent a different person. In fact, with the addition of a few
HyperCard text fields to hold field information from the text file, a stack
could serve as a nice representation of our original mailing list database.
 
Planning the Stack
 
Let's assume that our goal is to import our current mailing list into a
HyperCard stack. We first need to write our mailing list to a text file using
the appropriate field and record separater characters (these are usually TAB
for fields and RETURN for records). This means that there will need to be a
CARRIAGE RETURN character following every record in the text file and a TAB
character following every field. Many current databases have the ability to
export text in this manner.
 
"My mailing list" consists of 143 records (names). For each person in the list
I keep the following information:
1) Name
2) Address
3) City, State, Zip
4) Phone
5) Comment
 
In examining the mailing list, I can see that I have 143 records with each
record broken down into five fields. So we know that we will end up with 143
cards in the finished stack. And since each card can share a similar
background, we only need to create a total of five background fields into which
the data for each new card will be placed.
 
We start by creating a new stack with a new background and adding five
background fields to that card. When that is done, create a card button with
the name IMPORT. Here's what the script for the button might look like:
 
on mouseUp
   Ask "Import from what file:" with empty
   put it into filename --get filename and store it
   Open file filename --open the file
   Repeat
       Read from file filename until return --get 1 record at a time
       If it is empty then exit repeat --exit if there are no more records
       put it into record --put the record text into a variable
       Domenu "New card" --create a new card
       repeat with count = 1 to 5 --we have five fields so repeat five --times
       if offset(tab,record) > 0 then --last part of chunk has no  --delimiter
           put char 1 to (offset(tab,record) -1) of record into bkgnd field
       else
           put record into bkgnd field count --put last part of chunk
       end if
       delete char 1 to offset(tab,record) of record --zap chunk from  --record
       end repeat
   end repeat
end mouseUp
 
The first part of the script gets the filename, stores it and opens the file
We then enter a repeat loop which reads a single record, creates a new card and
places the field information in the appropriate fields. The inner repeat loop
looks for the field delimiter (tab) in the record data and grabs the chunk of
characters from the beginning of the record to that delimiter. It then inserts
that chunk into the appropriate field. The chunk is then deleted from the
variable and the loop cycles back through until all chunks are placed in
fields.
 
While this approach is reliable, it is also very slow and doesn't account for a
number of problems that might occur along the way. Consistent with our goal to
provide you with the best, the next WINDOID (Issue #3) continues this article
in more depth. We will present a script for a universal import button which
does both kinds of import (text and data). To use it, you can type it into any
button script.
 
 
                              Power User Tips
                               by Phil Wyman
 
1.  The DoMenu command will execute DAs. For example, DoMenu "Calculator".
 
2.  "It" is a local system variable, not a global.
 
3.  "Set Cursor" command normally uses the following:
"Set cursor to 1" = I-Beam
"Set cursor to 2" = crossbar
"Set cursor to 3" = thick crossbar
"Set cursor to 4" = watch
"Set cursor to 5" = arrow or browse tool
 
4.  "Set lockmessages to true" does not work in the message box.  This is
because "lockmessages" is turned off during idle. Therefore, lockmessages can
only be used in a script.
 
5.  If you don't see the menu bar on an application, Command-Spacebar will
allow you to see and use the menu bar.
 
6.  Option-O both in and out of Fatbits will show you where opaque white exists
on your card if you're in Paint Tools.
 
7.  Command-Drag sizes (elongates) a selected picture in HyperCard.
Command-Shift-Drag will enlarge and shrink the selected picture proportionally.
 
8.  When you are trying to intercept an arrowkey, you must use the message "on
arrowkey" with the argument "var."  Then you must see if "var" equals "left" or
"right" or "up" or "down." For example:
  on arrowkey var
     if var = "left" then exit arrowkey
     go next card
  end arrowkey
 
9.  If you have to declare many global variables at the beginning of your
script, you can declare them in the same line by separating them with a comma.
For example, "global var1,var2,var3,var4."
 
10.  You can edit your own patterns in the pattern windoid by double-clicking
on them. These changed patterns will stay with the particular stack and not
overlap into other stacks.
 
11.  If a user-defined function uses the same name as a HyperCard function,
HyperCard defaults to the user-defined function. For example, if you have a
function "average" that you have defined in a stack script, HyperCard will use
that function and not its own built-in average function.

12.  If you want a miniature picture of a card, you can do Copy Card from the
menu, then Command-Shift-V to paste a miniature on your screen.
 
13.  If you want to set more than one textstyle, you can say:   "set textstyle
of button to bold,italic,underline."  Also, if you want it to not have any
textstyle after it has been set to a certain style,  you can say:  "set
textstyle of button to plain."
 
14.  The user pressing Command-Period can stop any script, even if an ANSWER or
ASK dialog is on the screen.
 
15.  Double-clicking on a word in the Script Editor or in a field selects the
entire word.
 
16.  In a script, you might not know how many levels deep you are in calls to
other handlers that have called you.  "Exit to HyperCard"  will pop you out of
all sub-messages.
 
17.  If you have had trouble getting the name of a card, here's the trick.  Go
to the card and ask:  "get the short name of this card."  The short name will
give you the name of the card, whereas the long name will give you the entire
pathway to the card.
 
18.  "Repeat" or "Repeat Forever" will continue on until an exit repeat or an
exit to HyperCard is encountered.
 
19.  In a field, drag with the Command key on a selection of text.  HyperCard
will put it into the message box, and you can then execute it by hitting
return.
 
20.  If the user cancels an "ASK" dialog, HyperCard puts a null into the
variable "it."  You can therefore check and see if "it" is empty, thereby
knowing that the user clicked CANCEL.

21.  Once you have set a button to an icon, you can set the button to not have
an icon by saying:  "set icon of button to zero."
 
22.  Only a locked text field can receive mouse messages such as mouseup,
mousedown, mousewithin, etc.
 
23.  Two other characters work as HyperCard operators "greater than or equal"
and "less than or equal", as well as the more normal >= and <=.  You get these
characters by pressing Option-Greater Than or Option-Less Than.
 
24.  You can get rid of  your screen altogether by "set visible of cardwindow
to false."
 
25.  Functions are not to be defined within message handlers.
 
 
                    Programming Functionkeys in HyperTalk
                                By Robin Shank
 
The HyperTalk command "functionkey" allows you to associate a script with any
of the function keys on an extended keyboard.  To program a functionkey, use
the following format:
 
on functionkey thekey
     if thekey is 5 then
       -- add any script
     end if
     if thekey is 6 then
       put the heapspace  -- or whatever
     end if
end functionkey
 
You can put the script into a card, background, stack, or home script,
depending on how widely you want your functionkeys to be "detected."
 
The following script will make a functionkey that will automatically move
anything selected on the card into the background.  The beauty of using type
"x" with commandkey instead of domenu "cut" is that it transcends the fact that
the Edit menu reflects the object selected. The command key simply calls that
menu item, so it doesn't matter if it says "cut button" or "cut picture."
I've installed this script into my Home card, so that I can access it from any
stack.
 
On functionkey whatkey
     if whatkey is 6 then
       type "x" with commandkey  -- Cut whatever is seleted
       domenu "background"       -- enter the background
       type "v" with commandkey  -- Paste it
       domenu "background"       -- leave the background
     end if
end functionkeys
 
 
 
                              Icon Maker 2.1
 
As you know, HyperCard comes with many different button ICONs ready for your
immediate use.  Just double-click on any button while in the Button Tool and
you will see a dialog box with a button called Icon.  Clicking on this button
allows you to scroll through and choose one of many interesting icons for your
buttons.
One thing users have wanted was the ability to create and install other icons
in their stacks.  Icon Maker solves that problem.  Now you can create Icons
and put them into stacks very easily.
All you do is install Icon Maker in your System file and select it from your DA
menu.  An empty (32 X 32) ICON sized square appears and is capable of copying
anything you click on within its boundaries.  ICN#s (Finder Icons) are created
when you just click your mouse and ICONs are created if you press the command
key and click.
ICON resources are what HyperCard uses.  You will be asked via Standard File
where you want the ICON.  If you want to use it only in your personal stacks
you can click on your Home card.  This makes the ICON available to all of your
stacks that use your Home card.  If you want other people to enjoy your newly
created ICON, you will have to install it directly into the stacks you will be
sharing.
Pressing on the H key with the Icon Maker selection square showing gives you
HELP information.  Pressing any other key cancels Icon Maker.
IconMaker allows you to use clipart, or create your own art work and turn it
into usable ICONs for sharing in five clicks of a mouse.  This is a really
great utility for HyperCard.
Icon Maker 2.1 was created by Steve Fine.  I have spoken to Steve and he has
allowed me to put Icon Maker 2.1 in the AHUG StackWare shareware folder.  If
you come to the Cupertino AHUG meetings you will be able to take it and see if
it meets your needs just as you are invited to share in all of the stacks that
we bring to our meetings every other Thursday.  If you are out of the area
almost all Macintosh public domain librarys have it.  Steve only asks that if
you like it to please send him a contribution so that he may continue to
develop useful tools for you.  His address is:
 
Steve Fine
504 Linden Rd.
University Park, PA 16802
 
 
 
                                Editorial
                             by David Leffler
 
I hope you have enjoyed reading WINDOID and have found it to be interesting and
informative.  We care enough to take the time to give you the most up-to-date
information about HyperCard, and we would like to make a request for a little
of your time.  There is a form that follows this editorial; please fill it out
if you will.  We are very interested in hearing from you.  What sorts of stacks
are you using, what kind of stacks are you creating, and what are your joys and
frustrations in using HyperCard.
You have the unique opportunity to communicate directly with Bill, Dan, and the
entire HyperCard development team.  We really want to know what you would like
to see in HyperCard and are more than willing to give you what you want.  What
we need to make this happen is your input.  Let us know what you think.  We can
address it in WINDOID or perhaps the next revision of HyperCard.  You can make
a difference in the world by communicating with us.  Don't pass up the
opportunity!
 
The form:
 
Please use the following form to make a difference in the world:
 
Date:
Name:
Address:
Phone #:
Versions of:
 a.  HyperCard:
 b.  Associated software:
 c.  System Software:
       1. System
       2. Finder
       3. ImageWriter file
       4. LaserWriter file
       5. Any others
Type of Macintosh:
Peripherals:
Description of problem, suggestions or comments:
 
 
Please fill this form out as completely as possible and send it to:
 
AHUG
C/O David Leffler
Apple Computer Inc.
MS 27AQ
20525 Mariani Ave.,
Cupertino, CA  95014
 
Or copy the format and AppleLink it to:
 
HYPERBUG$
 
We thank you for your participation and know that you will be pleased to see
your ideas, comments, and suggestions appear in future issues of WINDOID, the
publication for the informed HyperCard user.
 
 
 
-- 

Keith Rollin                                               amdahl\
Sales Technical Support                               pyramid!sun !apple!keith
Apple Computer                                             decwrl/

Disclaimer: I read this board for fun, not profit. Anything I say is from the
            result of reading magazines, hacking, and soaking my head in acid.