Doug,

Although I am not a scripter, your message was a great post.  The logic
makes perfect sense and I think that might be exactly what is going on with
the 2 scripts I am currently having trouble with.  It seems like something
is in a loop of some sort, so when I try to manipulate the script in any way
via Script manager, Window Eyes locks up and has to be killed and
relaunched.  Whatever loop it might be in, is totally unnoticeable until you
try to either stop, reload, or disable the script.

Anyhow, nice post.  Thank you.


 
 
Warmest regards,
 
Rick Alfaro
[EMAIL PROTECTED]

-----Original Message-----
From: Doug Lee [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, September 10, 2008 4:17 PM
To: [email protected]
Subject: An urging regarding error handling in Window-Eyes scripts

I was prompted to put this message together by today's chain of
messages about various scripts that produce no output and/or seem to
stall forever.

I've probably said this before, but I'm not sure if I said it here on
this list.

I would like to urge Window-Eyes scripters that use VBScript to avoid
using "on error resume next" except where there is very good reason to
do so.  Here are a few major problems that little command can cause:

1.  If an error occurs in an If statement while an "on error resume
next" is in effect, it will always act True, because "resume next"
means resume execution inside the If part.  This is usually exactly
what you do not want.

2.  If an error occurs in a While or other loop condition, it can
cause an infinite loop, because "resume next" means resume execution
inside the loop.

3.  You may put an "on error resume next" line in your code to catch
one type of error, but it will quietly absorb (and mask) any
unexpected type of error imaginable.  For example, if you try
protecting yourself from division by 0 when calculating an average,
but you happen to misspell a variable name, you will get the wrong
answer without seeing why.

When you do use "on error resume next," I recommend the following
precautions:

1.  Run without that line first and make sure to figure out what kinds
of errors might occur there.  This is the time to make sure nothing is
misspelled etc.

2.  When you put the "on error resume next" line in, put a corresponding
"on error goto 0" line below it, and as close to the "on error
resume next" as possible.  Avoid control flow commands like If,
While, sub and function calls, etc. within that little space between
the two lines.  Think of the gap between "on error resume next" and
"on error goto 0" as a 500-foot deep crack in the ground:  If you
don't want someone to fall in, keep that thing skinny!

In case it's useful, I am pasting below the output of a
hastily-written Perl program that attempts to score vbs files on their
use of "on error resume next."  Here are the rules it uses first:

        - A score of N means a set of N code lines between "on error resume
next" and "on error goto 0" (not inclusive) was found.
        - Comments and blank lines in code don't count.
        - A file's score is the highest count found in it.
        - A sub, function, or file with an "on error resume next" that is
not turned back off gets an infinite score.
        - Infinite scores will be suffixed with "function," "sub," or "file"
to indicate which type of infinity was found.

I wrote this rather quickly, so pardon any errors in its results.  I
did spot-check it though.

And here's the output, most unprotected lines first, infinite scores
at the top, files scoring 0 omitted entirely.  The file names are the
package name, a slash, and the actual file name.

        Infinite (Function):  weatherornot/weatherornot.vbs
        Infinite (Function):  LookupTerm/LookupTerm.vbs
        Infinite (Function):  HomerSharedObject/HomerSharedObject.vbs
        Infinite (Function):  ExamineSystem/ExamineSystem.vbs
        Infinite (Function):  ActivateWindow/ActivateWindow.vbs
             81:  progressindicator/ProgressIndicator.vbs
             59:  HarvestWindow/HarvestWindow.vbs
             47:  CaptureScreen/CaptureScreen.vbs
             46:  weevent/weevent.vbs
             38:  OperateServices/OperateServices.vbs
             34:  CalculateDate/CalculateDate.vbs
             26:  IEMax/IEMax.vbs
             20:  winamp/winamp.vbs
             19:  TerminateProcesses/TerminateProcesses.vbs
             18:  RelaunchWindow-eyes/RelaunchWindow-eyes.vbs
             18:  CheckLanguage/CheckLanguage.vbs
             16:  TrackTime/TrackTime.vbs
             16:  SetCheckbox/SetCheckbox.vbs
             16:  SelectText/SelectText.vbs
             16:  RunAtCursor/RunAtCursor.vbs
             16:  RecentPaths/RecentPaths.vbs
             16:  PasteSpecialCharacter/PasteSpecialCharacter.vbs
             16:  JumpToItem/JumpToItem.vbs
             16:  InteractiveJScript/InteractiveJScript.vbs
             16:  InstallPackages/InstallPackages.vbs
             16:  GoToSpecialFolder/GoToSpecialFolder.vbs
             16:  GoToFolder/GoToFolder.vbs
             16:  FocusControl/FocusControl.vbs
             16:  EvaluateJScript/EvaluateJScript.vbs
             16:  DetectShortcutKeys/DetectShortcutKeys.vbs
             16:  AppendToClipboard/AppendToClipboard.vbs
             15:  gwtoolkit/gwtoolkit.vbs
             15:  MicrosoftWordCount/WinwordCount.vbs
             14:  autocomplete/autocomplete.vbs
             11:  HomerLayout/HomerLayout.vbs
              9:  ScriptTemplate/ScriptTemplate.vbs
              9:  ReplyToSender/ReplyToSender.vbs
              9:  RemapCapsLock/RemapCapsLock.vbs
              9:  EdSharp/EdSharp.vbs
              8:  WEActions/WEActions.vbs
              8:  TogglePunctuation/TogglePunctuation.vbs
              8:  SpellIt/SpellIt.vbs
              8:  ScriptMenu/ScriptMenu.vbs
              8:  ScriptManager/ScriptManager.vbs
              8:  RestoreDefaultSets/RestoreDefaultSets.vbs
              8:  LearnScripting/LearnScripting.vbs
              8:  KillWineyes/KillWineyes.vbs
              8:  FileDir/FileDir.vbs
              8:  DeleteStrokes/DeleteStrokes.vbs
              8:  BeautifyVBScript/BeautifyVBScript.vbs
              6:  easycddaextractor/easycddaextractor.vbs
              5:  ShutdownNow/ShutdownNow.vbs
              5:  RestartNow/RestartNow.vbs
              5:  QuerySettings/QuerySettings.vbs
              5:  LoadedScripts/LoadedScripts.vbs
              5:  ConvertUnits/ConvertUnits.vbs
              4:  AlternateMenu/AlternateMenu.vbs
              3:  RelaunchWindow-eyes/BootStrap.vbs

-- 
Doug Lee, Senior Accessibility Programmer
SSB BART Group - Accessibility-on-Demand
mailto:[EMAIL PROTECTED]  http://www.ssbbartgroup.com
"While they were saying among themselves it cannot be done,
it was done." --Helen Keller

Reply via email to