[comp.sys.mac.hypercard] Computer Science analysis of HyperTalk wanted

DATJN@NEUVM1.Bitnet (Jakob Nielsen Tech Univ of Denmark) (04/20/88)

Has anybody written an analysis of HyperTalk from a traditional
computer science language perspective ?
Some observations of my own:

In the April 1988 APDAlog Newsletter, Dan Shafer recommends the
following script to manage radio buttons:
 on mouseUp
   set the hilite of me to true
   repeat with counter = 8 to 15
     if counter is not the number of me then set the hilite of -
     button counter to false
   end repeat
 end mouseUp

Note that this code will fail under the following condition (among
many other possibilities):
If I have *two* set of radio buttons of this kind and remove a button
from the bottommost set, then the numbers of the buttons in the
topmost set will all be diminished by one - instant bug!
So this coding style which is encouraged by the design of HyperCard is
definitively *not* modular.
One of the problems is that something which can be considered part of
the state of an object (its number) is modified when changing other objects.

Another case:
When linking a button to a card, HyperCard changes the script of the
button to include the number of the card being linked to.
Modifying code instead of variables ... Here the destination information
is hardwired into the code instead of being kept in a local variable
of the button.

jmunkki@santra.UUCP (Juri Munkki) (04/23/88)

In article <50156@sun.uucp> DATJN@NEUVM1.Bitnet (Jakob Nielsen Tech Univ of Denmark) writes:
>If I have *two* set of radio buttons of this kind and remove a button
>from the bottommost set, then the numbers of the buttons in the
>topmost set will all be diminished by one - instant bug!

Here's what I would do, if I wanted radio buttons with hypercard. You have
to have a special "findRadio" for the first button of the group. All the other
buttons can have the same "findRadio". All the buttons have the same mouseUp.

-- First button script for findRadio
on findRadio
  global count
  
  add 1 to count
  put count
end findRadio

-- findRadio for other than first button in group
on findRadio
  global theButton,count
  
  add 1 to count
  subtract 1 from theButton
  send findRadio to Button theButton
end findRadio

on mouseUp
  global theButton,count
  
  put the number of the target into theButton
  put 0 into count
  send findRadio
end mouseUp

Note that this program doesn't actually do any highlighting, but it does tell
you which button in a script was hit. The highlighting and button handling
code can be written into the first findRadio.

Ok, now flame me...

Juri Munkki
Helsinki University of Technology Computing Centre
jmunkki@santra.hut.fi
jmunkki@fingate.bitnet