Frequent corruption of Revolution program?

Stephen McNutt mcnuttsp at bellsouth.net
Mon Jul 19 21:10:05 EDT 2004


On 7/19/04 7:48 PM, "Richard Gaskin" <ambassador at fourthworld.com> wrote:

> Sarah Reichelt wrote:
> 
>> On 19 Jul 2004, at 12:06 pm, Stephen Paul McNutt wrote:
>>>   My program is nonfunctional.  Reinstalling Revolution fixes the
>>> problem.  It can happen several times a day.  Does anyone know
>>> anything about this?
>> 
>> It's hard to tell without any more info, but it sounds like one of your
>> scripts might deleting one of the Rev components. I did this once
>> accidently using the delete command when setting the default folder had
>> failed (the folder didn't exist) so instead of deleting my temporary
>> files, I deleted parts of the Revolution folder instead.
>> 
>> The only corruption of the program I have heard of is when revolution
>> fails to complete it's startup, getting stuck at the splash screen where
>> it says "Loading plugins". This is fixed by replacing the "Saves" folder
>> inside the "Components" folder, but it sounds like you are getting
>> beyond this stage.
>> 
>> I would check your scripts for any "delete" commands and check very
>> carefully to make sure what you are deleting.
> 
> Good idea, Sarah.
> 
> There have been cases where unexpected behavior has occured when
> referring to stacks by number rather than by name.  While numbers refer
> to specific windows (the equivalent of Rev "stacks") in a SuperCard
> file, in Revolution it's used very differently.  I don't know if Stephen
> comes from a SuperCard background, but if so it might help explain
> what's going on.
> 
> For more information on the relationship between numeric stack
> references and the unexpected results that might superficially appear to
> be corruption, see:
> <http://lists.runrev.com/pipermail/use-revolution/2004-January/029635.html>
> 
> Of course the best diagnosis can only come from seeing the script.
> Stephen, if the problem persists could I trouble you to post the portion
> of the code that's doing the deleting?

First, thank you so much to both you, Richard, and Sarah for taking the time
to give such detailed help.  It's wonderful to have a place like this list
to find answers.

I come from a HyperCard background.  I read your explanation (following your
links) of things that can cause behavior you might mistake for corruption.
I agree that my problem probably isn't corruption.  I used that word without
knowing exactly what it meant.

Below is the script of my main stack.  I'm sure it's a mess.

Thanks again,
Stephen McNutt

global CQCustomer
global CQProductKey
global repeatRunStopper -- this is to keep the preOpenStack script from
running except once when the app first opens
global teamBeingChanged
global team1name
global team1members -- an array variable containing the names of players on
team 1
global theHatForTeam1 -- a copy of team1members from which names will be
pulled
global team2name
global team2members
global theHatForTeam2
global questionSetName
global questionSet -- an array containing the questions in the selected set
global theHatForQuestions -- a copy of questionSet from which questions will
be pulled
global questionOrder -- can have values "sequential", "randomWithRepeats",
or "randomWithoutRepeats"
global contestantOrder -- can have same values as questionOrder
global timerTime
global isAnswerCorrect
global textForSample
global questionDisplayTextSize
global questionDisplayTextFont
global theGame
global TTTgamesToWin

on PreOpenStack
  
  if repeatRunStopper is empty then
    put 1 into repeatRunStopper
    
    set the loc of me to the screenLoc

    local lFileName
    local lItemDelimeter
    local ldefaultFolder
    if the environment is "development" then --Sets the default folder to
the folder containing this stack file.
      put the fileName of me into lFileName
      put the itemDelimiter into lItemDelimiter
      set the itemDelimiter to "/"
      put "" into the last item of lFilename
      set the defaultFolder to lFileName
      set the itemDelimiter to lItemDelimiter
    end if
    if the environment is not "development" then
      if the platform is "MacOS" then --Sets the default folder to the
correct folder within a Mac OSX bundle (package).
        put defaultFolder into ldefaultFolder
        put "/CQ.app/Contents/MacOS" after lDefaultFolder
        set the defaultFolder to lDefaultFolder
      end if
    end if
    if the platform is "MacOS" then
      set the height of stack "Classroom Quizshow" to 450
    end if
    
    set the visible of stack "data/Settings Saver.edb" to false
     
    put field "team1name" of card 1 of stack "data/Settings Saver.edb" into
team1name
    put team1name into field "team1nameDisplay" of card "Setup" of stack
"Classroom Quizshow"
    put team1name into field "loadedTeam1Display" of card "Teams" of stack
"Classroom Quizshow"
    put field "team1members" of card 1 of stack "data/Settings Saver.edb"
into team1members
    put team1members into theHatForTeam1 --from which names are drawn,
leaving the complete list, team1members, intact
     
    put field "team2name" of card 1 of stack "data/Settings Saver.edb" into
team2name
    put team2name into field "team2nameDisplay" of card "Setup" of stack
"Classroom Quizshow"
    put team2name into field "loadedTeam2Display" of card "Teams" of stack
"Classroom Quizshow"
    put field "team2members" of card 1 of stack "data/Settings Saver.edb"
into team2members
    put team2members into theHatForTeam2 --from which names are drawn,
leaving the complete list, team2members, intact
     
    put field "questionSetName" of card 1 of stack "data/Settings Saver.edb"
into questionSetName
    put questionSetName into field "questionSetNameDisplay" of card "Setup"
of stack "Classroom Quizshow"
    put questionSetName into field "loadedQuestionSetDisplay" of card
"Questions" of stack "Classroom Quizshow"
    put field "questionSet" of card 1 of stack "data/Settings Saver.edb"
into questionSet
    put questionSet into theHatForQuestions --from which questions are
drawn, leaving the complete list, questionSet, intact
     
    createFontMenu
     
    put field "textForSample" of card 1 of stack "data/Settings Saver.edb"
into textForSample
    put textForSample into field "textSampleText" of card "Font" of stack
"Classroom Quizshow"
    put textForSample into field "textSample" of card "Font" of stack
"Classroom Quizshow"
    put field "questionDisplayTextSize" of card 1 of stack "data/Settings
Saver.edb" into questionDisplayTextSize
    if questionDisplayTextSize is "auto" then
      global optimizedTextSize
      put 48 into optimizedTextSize
      set the disabled of button "chooseTextSize" of card "Font" of stack
"Classroom Quizshow" to true
      set the selected of button "autoTextSize" of card "Font" of stack
"Classroom Quizshow" to true
      set the textSize of field "textSample" of card "Font" of stack
"Classroom Quizshow" to optimizedTextSize
    else
      set the textSize of field "textSample" of card "Font" of stack
"Classroom Quizshow" to questionDisplayTextSize
      set the selected of button "autoTextSize" of card "Font" of stack
"Classroom Quizshow" to false
    end if
    set the label of button "chooseTextSize" of card "Font" of stack
"Classroom Quizshow" to questionDisplayTextSize
    put questionDisplayTextSize into field "sizeDisplay" of card "Setup" of
stack "Classroom Quizshow"
    put field "questionDisplayTextFont" of card 1 of stack "data/Settings
Saver.edb" into questionDisplayTextFont
    set the label of button "chooseTextFont" of card "Font" of stack
"Classroom Quizshow" to questionDisplayTextFont
    set the textFont of field "textSample" of card "Font" of stack
"Classroom Quizshow" to questionDisplayTextFont
    put questionDisplayTextFont into field "fontDisplay" of card "Setup" of
stack "Classroom Quizshow"
    -- Setup for radio buttons on Setup card...
    put field "questionOrder" of card 1 of stack "data/Settings Saver.edb"
into questionOrder
    put field "contestantOrder" of card 1 of stack "data/Settings Saver.edb"
into contestantOrder
    switch questionOrder
    case "sequential"
      set the hilitedButtonName of group "questionOrderRadioButtons" of card
"Setup" of stack "Classroom Quizshow" to "questionOrderRadio1"
      break
    case "randomWithoutRepeats"
      set the hilitedButtonName of group "questionOrderRadioButtons" of card
"Setup" of stack "Classroom Quizshow" to "questionOrderRadio2"
      break
    case "randomWithRepeats"
      set the hilitedButtonName of group "questionOrderRadioButtons" of card
"Setup" of stack "Classroom Quizshow" to "questionOrderRadio3"
      break
    end switch
    switch contestantOrder
    case "sequential"
      set the hilitedButtonName of group "contestantOrderRadioButtons" of
card "Setup" of stack "Classroom Quizshow" to "contestantOrderRadio1"
      break
    case "randomWithoutRepeats"
      set the hilitedButtonName of group "contestantOrderRadioButtons" of
card "Setup" of stack "Classroom Quizshow" to "contestantOrderRadio2"
      break
    case "randomWithRepeats"
      set the hilitedButtonName of group "contestantOrderRadioButtons" of
card "Setup" of stack "Classroom Quizshow" to "contestantOrderRadio3"
      break
    end switch
    -- Setup for timer...
    put field "timerTime" of card 1 of stack "data/Settings Saver.edb" into
timerTime
    set the label of button "timerSetButton" of card "Setup" of stack
"Classroom Quizshow" to timerTime
    put field "TTTgamesToWin" of card 1 of stack "data/Settings Saver.edb"
into TTTgamesToWin
    set the label of button "TTTgamesToWin" of card "Game" of stack
"Classroom Quizshow" to TTTgamesToWin
    put field "theGame" of card 1 of stack "data/Settings Saver.edb" into
theGame
    put theGame into field "theGameDisplay" of card "Setup" of stack
"Classroom Quizshow"
    switch theGame
    case "Tic Tac Tournament"
      set the hilitedButtonName of group "theGameButtonGroup" of card "Game"
of stack "Classroom Quizshow" to "Tic Tac Tournament"
      break
    case "Dots"
      set the hilitedButtonName of group "theGameButtonGroup" of card "Game"
of stack "Classroom Quizshow" to "Dots"
      break
    end switch
     
    put field "CQCustomer" of card 1 of stack "data/Settings Saver.edb" into
CQCustomer
    put field "CQProductKey" of card 1 of stack "data/Settings Saver.edb"
into CQProductKey
    local inputProductKey
    repeat with n=1 to 6
      put charToNum(char n of CQCustomer) after inputProductKey
    end repeat
    multiply inputProductKey by 2
    subtract 123456789 from inputProductKey
    if inputProductKey = CQProductKey then
      set the lockText of field "cardName" of stack "data/Questions.edb" to
false
      set the lockText of field "cardContents" of stack "data/Questions.edb"
to false
      put "User" && CQCustomer & return & "Key" && CQProductKey into field
"registrationInfo" of card "Setup" of stack "Classroom Quizshow"
      global CQPurchased
      put "yes" into CQPurchased
    else
      set the lockText of field "cardName" of stack "data/Questions.edb" to
true
      set the lockText of field "cardContents" of stack "data/Questions.edb"
to true
      put "Thanks for trying the Classroom Quizshow demo!" into field
"registrationInfo" of card "Setup" of stack "Classroom Quizshow"
      open stack "Splash Screen"
      set the visible of stack "Classroom Quizshow" to false
      global CQPurchased
      put "no" into CQPurchased
    end if
    
  end if
   
end preOpenStack

on createFontMenu
  get the fontNames -- list of installed fonts
  sort lines of it
  put it into button "chooseTextFont" of card "Font" of stack "Classroom
Quizshow"
end createFontMenu

-- The function below is called like this:
thePicker(theHatForTeam1,contestantOrder) or
thePicker(theHatForQuestions,questionOrder)
function thePicker whichArray,whichOrder
  put whichArray into theHat
  switch whichOrder
  case "sequential"
    put line 1 of theHat into thePick
    delete line 1 of theHat
    break
  case "randomWithoutRepeats"
    put the random of (the number of lines in theHat) into theNumber
    put line theNumber of theHat into thePick
    delete line theNumber of theHat
    break
  case "randomWithRepeats"
    put the random of (the number of lines in theHat) into theNumber
    put line theNumber of theHat into thePick
    break
  end switch
  switch whichArray
  case theHatForTeam1
    put theHat into theHatForTeam1
    if theHat is empty then put team1members into theHatForTeam1
    break
  case theHatForTeam2
    put theHat into theHatForTeam2
    if theHat is empty then put team2members into theHatForTeam2
    break
  case theHatForQuestions
    put theHat into theHatForQuestions
    if theHat is empty then put questionSet into theHatForQuestions
    break
  end switch
  return thePick
end thePicker

on presentQuestion
  put thePicker(theHatForQuestions,questionOrder) into field
"questionDisplay"
  put "" into field "timerDisplay"
  global isAnswerCorrect
  put "" into isAnswerCorrect
  --optimize text size to fit field...
  global questionDisplayTextSize
  if questionDisplayTextSize is "auto" then
    set the visible of field "questionDisplay" to false
    set the visible of field "optimizingFontSize" to true
    global optimizedTextSize
    put "Optimized font size:" && optimizedTextSize && "Pts." into field
"optimizingFontSize"
    set the visible of group "questionDisplayGroup" to true
     
    repeat while the formattedHeight of field "questionDisplay" < the height
of field "questionDisplay"
      add 24 to optimizedTextSize
      set the textSize of field "questionDisplay" to optimizedTextSize
      put "Optimized font size:" && optimizedTextSize && "Pts." into field
"optimizingFontSize"
    end repeat
     
    repeat while the formattedHeight of field "questionDisplay" > the height
of field "questionDisplay"
      subtract 12 from optimizedTextSize
      set the textSize of field "questionDisplay" to optimizedTextSize
      put "Optimized font size:" && optimizedTextSize && "Pts." into field
"optimizingFontSize"
    end repeat
    add 12 to optimizedTextSize
    set the textSize of field "questionDisplay" to optimizedTextSize
    put "Optimized font size:" && optimizedTextSize && "Pts." into field
"optimizingFontSize"
     
    repeat while the formattedHeight of field "questionDisplay" > the height
of field "questionDisplay"
      subtract 4 from optimizedTextSize
      set the textSize of field "questionDisplay" to optimizedTextSize
      put "Optimized font size:" && optimizedTextSize && "Pts." into field
"optimizingFontSize"
    end repeat
  else
    set the visible of field "optimizingFontSize" to false
  end if
   
  set the visible of field "questionDisplay" to true --if it isn't already
  set the visible of group "questionDisplayGroup" to true --if it isn't
already
  global startingTime
  global timerTime
  put the seconds into startingTime
  put timerTime into field "timerDisplay"
  startTimer
end presentQuestion

on startTimer
  global timerTime
  global startingTime
  global timeRemaining
  global isAnswerCorrect
  global theGame
  
  if isAnswerCorrect is empty then
    put timerTime - (the seconds - startingTime) into timeRemaining
    if timeRemaining > 0 then
      put timeRemaining into field "timerDisplay" of card "game screen" of
stack theGame
      send startTimer to me in 10 ticks
    end if
    if timeRemaining <= 0 then
      put "incorrect" into isAnswerCorrect
      put timeRemaining into field "timerDisplay" of card "game screen" of
stack theGame
      set the visible of group "clickToContinueGroup" of card "game screen"
of stack theGame to true
    end if
  end if
end startTimer

on closeStack
  global team1name
  put team1name into field "team1name" of card 1 of stack "data/Settings
Saver.edb"
  global team2name
  put team2name into field "team2name" of card 1 of stack "data/Settings
Saver.edb"
  global team1members
  put team1members into field "team1members" of card 1 of stack
"data/Settings Saver.edb"
  global team2members
  put team2members into field "team2members" of card 1 of stack
"data/Settings Saver.edb"
  global contestantOrder
  put contestantOrder into field "contestantOrder" of card 1 of stack
"data/Settings Saver.edb"
  global questionSetName
  put questionSetName into field "questionSetName" of card 1 of stack
"data/Settings Saver.edb"
  global questionSet
  put questionSet into field "questionSet" of card 1 of stack "data/Settings
Saver.edb"
  global questionOrder
  put questionOrder into field "questionOrder" of card 1 of stack
"data/Settings Saver.edb"
  global timerTime
  put timerTime into field "timerTime" of card 1 of stack "data/Settings
Saver.edb"
  global TTTgamesToWin
  put TTTgamesToWin into field "TTTgamesToWin" of card 1 of stack
"data/Settings Saver.edb"
  global theGame
  put theGame into field "theGame" of card 1 of stack "data/Settings
Saver.edb"
  global textForSample
  put textForSample into field "textForSample" of card 1 of stack
"data/Settings Saver.edb"
  global questionDisplayTextFont
  put questionDisplayTextFont into field "questionDisplayTextFont" of card 1
of stack "data/Settings Saver.edb"
  global questionDisplayTextSize
  put questionDisplayTextSize into field "questionDisplayTextSize" of card 1
of stack "data/Settings Saver.edb"
  global CQCustomer
  put CQCustomer into field "CQCustomer" of card 1 of stack "data/Settings
Saver.edb"
  global CQProductKey
  put CQProductKey into field "CQProductKey" of card 1 of stack
"data/Settings Saver.edb"
  
  save stack "data/Settings Saver.edb" as "data/Settings Saver.edb"
  close stack "data/Settings Saver.edb"
  pass closeStack
  set the visible of stack "Classroom Quizshow" to true --Just in case
someone clicked Quit on the Splash Screen
end closeStack




More information about the use-livecode mailing list