[jawsscripts] Re: Changing the synth volume

  • From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Mon, 8 Nov 2010 19:01:19 -0000

Sorry Andre,

  I wasn't paying attention to what you did.  I see that Jamal's code 
contains two different scripts, one to raise the volume, one to lower it. 
It would be possible to combine these into one script with a lot of extra 
code to decide which hotkey was pressed to call the combined script.  But 
the simpler way would be to assign a separate hotkey to each script, using 
the method I outlined twice.  The dialog which appears when you press 
control + d is related to the script you are currently editing.

  hth

Martin


----- Original Message ----- 
From: "Andre Williams" <andre.williams.1965@xxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Monday, November 08, 2010 4:50 PM
Subject: [jawsscripts] Re: Changing the synth volume


> Martin. Just took another shot at this and I discovered that if I focused 
> on
> the part of this file which stated script, I was then able to attach a
> hotkey to this script. I was also able to find this new script in the
> keyboard manager. The problem is that when I use my 2 hotkeys I hear the
> following:
> Volume louder 44%
> Volume softer 39%.
> In actuality, nothing happens, the volume remains the same. Any ideas?
> Andre
> ----- Original Message ----- 
> From: "Martin Slack" <m.g.slack@xxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Monday, November 08, 2010 4:13 AM
> Subject: [jawsscripts] Re: Changing the synth volume
>
>
> If you open the script manager and go to the script you just created in
> default.jss, then press control+d, you will get the documentation dialog,
> the last input box of which allows you to assign a hotkey by pressing the
> desired keys.  Then tab to the ok button, press it and then recompile. 
> The
> hotkey should then be there when you look in the default section in the
> keyboard manager.
>
>  hth
>
> Martin
>
>
> ----- Original Message ----- 
> From: "Gordon Luke" <Gordon.Luke@xxxxxxxxxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Monday, November 08, 2010 11:48 AM
> Subject: [jawsscripts] Re: Changing the synth volume
>
>
>> Hi
>>
>> I just went into my Default.JKM using Notepad and added a couple of lines
>> to the common keys section e.g.
>>
>> [Common Keys]
>> Control+Windows+F11=VoiceSofter
>> Control+Windows+F12=VoiceLouder
>>
>> Hope this helps.
>>
>> Gordon Luke
>> Capita IT (CAIM)
>>
>>
>>
>>             "Andre Williams"
>>             <andre.williams.1
>>             965@xxxxxxxxx>                                             To
>>             Sent by:                  <jawsscripts@xxxxxxxxxxxxx>
>>             jawsscripts-bounc                                          cc
>>             e@xxxxxxxxxxxxx
>>                                                                   Subject
>>                                       [jawsscripts] Re: Changing the
>>                                       synth volume
>>
>>             08/11/2010 10:32
>>
>>             Please respond to
>>             jawsscripts@freel
>>                 ists.org
>>
>>
>>
>>
>>
>>
>> Gordon. Hopefully you or someone else can walk me through the process of
>> attaching a hotkey to the script below.
>> I have taken the script text below and copied and pasted into my jaws 11
>> default.jss file.
>> I compiled and all went well.
>> I launched jaws 11 and went into the keyboard manager to assign a hotkey
>> but
>> I couldn't find the script: VoiceLouder().
>> What's my next step to test this script?
>> T-Y.
>> Andre
>> ----- Original Message -----
>> From: "Gordon Luke" <Gordon.Luke@xxxxxxxxxxxxxxxx>
>> To: <jawsscripts@xxxxxxxxxxxxx>
>> Sent: Monday, November 08, 2010 2:05 AM
>> Subject: [jawsscripts] Re: Changing the synth volume
>>
>>
>> Found this in my list of useful e-mails from the past.  Hoped it might
>> help
>> with the current desire though I know it's not exactly what you want.
>>
>> Gordon Luke
>> Capita IT (CAIM)
>>
>>
>>
>>             Jamal Mazrui
>>             <empower@xxxxxxxx
>>             t>                                                         To
>>             Sent by:                  JAWSScripts@xxxxxxxxxxxxx
>>             jawsscripts-bounc                                          cc
>>             e@xxxxxxxxxxxxx
>>                                                                   Subject
>>                                       [jawsscripts] Re: Changing the
>>                                       synth volume
>>
>>             17/08/2010 15:53
>>
>>             Please respond to
>>             jawsscripts@freel
>>                 ists.org
>>
>>
>>
>>
>>
>>
>> Below is code from the Homer script library,
>> http://EmpowermentZone.com/kitsetup.zip
>>
>> There are scripts to change speech volume and rate, up or down.
>>
>> Hope this helps,
>> Jamal
>>
>> Void Function VoiceSaveSetting(String sSetting, Int iLevel)
>> ;Save an Eloquence voice setting
>> Var
>> Int iLoop,
>> String sJcf, String sVoice, String sVoiceList
>>
>> Let sJcf = GetActiveConfiguration() + ".jcf"
>> Let sVoiceList =
>> "Global|Error|Keyboard|Screen|PCCursor|JAWSCursor|Message"
>> Let iLoop = 1
>> While iLoop
>> Let sVoice = StringSegment(sVoiceList, "|", iLoop)
>> If StringIsBlank(sVoice) Then
>> Let iLoop = 0
>> Else
>> Let sVoice = "eloq-" + sVoice + "Context"
>> IniWriteInteger(sVoice, sSetting, iLevel, sJcf)
>> Let iLoop = iLoop + 1
>> EndIf
>> EndWhile
>> EndFunction
>>
>> Script VoiceLouder()
>> ;make voice 5% louder
>> Var
>> Int iLevel, Int iMax, Int iMin,
>> String sSetting
>>
>> SayString("Volume louder")
>> Let sSetting = "Volume"
>> Let iLevel =GetVoiceVolume(VCTX_GLOBAL , True)
>> GetVoiceVolumeRange(iMin, iMax)
>> Let iLevel =GetSystemVolume()
>> GetSystemVolumeRange(iMin, iMax)
>> If iLevel ==iMax Then
>> SayString("Top")
>> Else
>> Let iLevel =iLevel +(5 *(iMax -iMin) /100)
>> Let iLevel =Min(iLevel, iMax)
>> SetVoiceVolume(VCTX_GLOBAL , iLevel)
>> SetSystemVolume(iLevel)
>> VoiceSaveSetting(sSetting, iLevel)
>> SayString(IntToString(100 *(iLevel -iMin)/(iMax -iMin)) +" percent")
>> EndIf
>> EndScript
>>
>> Script VoiceSofter()
>> ;Make voice 5% softer
>> Var
>> Int iLevel, Int iMax, Int iMin,
>> String sSetting
>>
>> SayString("Volume softer")
>> Let sSetting = "Volume"
>> Let iLevel =GetVoiceVolume(VCTX_GLOBAL , True)
>> GetVoiceVolumeRange(iMin, iMax)
>> Let iLevel =GetSystemVolume()
>> GetSystemVolumeRange(iMin, iMax)
>> If iLevel ==iMin Then
>> SayString("Bottom")
>> Else
>> Let iLevel =iLevel -(5 * (iMax -iMin) /100)
>> Let iLevel =max(iLevel, iMin)
>> SetVoiceVolume(VCTX_GLOBAL , iLevel)
>> SetSystemVolume(iLevel)
>> VoiceSaveSetting(sSetting, iLevel)
>> SayString(IntToString(100 *(iLevel -iMin)/(iMax -iMin)) +" percent")
>> EndIf
>> EndScript
>>
>> Script VoiceFaster ()
>> ;Make voice 5% faster
>> Var
>> Int iLevel, Int iMax, Int iMin,
>> String sSetting
>>
>> SayString("Speed faster")
>> Let sSetting = "Speed"
>> Let iLevel =GetVoiceRate(VCTX_GLOBAL , True)
>> GetSynthRateRange(iMin, iMax)
>> If iLevel == iMax Then
>> SayString("Top")
>> Else
>> Let iLevel = iLevel +(5 *(iMax -iMin) /100)
>> Let iLevel =Min(iLevel, iMax)
>> SetVoiceRate(VCTX_GLOBAL , iLevel)
>> ;GetVoiceRate(VCTX_GLOBAL, True)
>> VoiceSaveSetting(sSetting, iLevel)
>> SayString(IntToString(100 *(iLevel -iMin)/(iMax -iMin)) +" percent")
>> EndIf
>> EndScript
>>
>> Script VoiceSlower ()
>> ;Make voice 5% slower
>> Var
>> Int iLevel, Int iMax, Int iMin,
>> String sSetting
>>
>> SayString("Speed slower")
>> Let sSetting = "Speed"
>> Let iLevel =GetVoiceRate(VCTX_GLOBAL , True)
>> GetSynthRateRange(iMin, iMax)
>> If iLevel == iMin Then
>> SayString("Bottom")
>> Else
>> Let iLevel =iLevel -(5 * (iMax -iMin) /100)
>> Let iLevel =max(iLevel, iMin)
>> SetVoiceRate(VCTX_GLOBAL , iLevel)
>> ;GetVoiceRate(VCTX_GLOBAL, True)
>> VoiceSaveSetting(sSetting, iLevel)
>> SayString(IntToString(100 *(iLevel -iMin)/(iMax -iMin)) +" percent")
>> EndIf
>> EndScript
>>
>>
>> -----Original Message-----
>> From: jawsscripts-bounce@xxxxxxxxxxxxx
>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Patrik Johansson
>> Sent: Tuesday, August 17, 2010 5:45 AM
>> To: jawsscripts@xxxxxxxxxxxxx
>> Subject: [jawsscripts] Changing the synth volume
>>
>> Hi!
>>
>> Nobody having tips for this?
>> What I want to do is a script that adjusts the volume of the speech and
>> makes the change global to all applications.
>>
>> The line:
>> SetVoiceVolume(vctx_global,50)
>> Changes the volume to 50, but when switching to another application the
>> volume goes back to what it was before.
>> How do I avoid this and make the change permanent and global to all
>> applications?
>>
>> Best regards,
>> Patrik Johansson
>> Polar Print, Sweden
>> -----Ursprungligt meddelande-----
>> Frn: jawsscripts-bounce@xxxxxxxxxxxxx
>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] Fr jaws tech
>> Skickat: den 12 augusti 2010 01:35
>> Till: jawsscripts@xxxxxxxxxxxxx
>> mne: [jawsscripts] Re: Finding DOM element at the virtual cursor
>>
>> O.K. guys.  Here is what I came up with. It works for what I wanted and
>> that was a quick way to jump into the DOM for wherever the virtual cursor
>> is located.  It was a little tricky going between the output from the 
>> JAWS
>> GetTagIndex() function (only returns visible elements) and the collection
>> returned in the DOM (includes both visible and hidden elements) but it 
>> was
>> only a couple lines of code to deal with that.
>> Thanks for all your input.
>>
>>
>>
>> Object Function GetCurrentElement ()
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>> ;;; This function returns an object pointer to the element at the virtual
>> cursor's current position ;;;;
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>
>> var
>> string tagname,
>> int jawstagindex,
>> object oIE,
>> object oElement,
>> object oTags,
>> int i,
>> int iIndex
>>
>> PCCursor()
>> If Not IsVirtualPCCursor () then
>>     TurnOffFormsMode()
>> endif
>> let oIE=IEGetCurrentDocument () ;; document object let
>> tagname=StringSegment(GetElementDescription (1, TRUE),"\n",1) let
>> oTags=oIE.body.GetElementsByTagName(tagname) ;;collection of elements 
>> with
>> common tagname (includes hidden elements) let jawstagindex=GetTagIndex
>> (tagname) ;; index of current element within collection of visible
>> elements of same tag let iIndex=0
>>
>> ;;;;;; Loop through collection of all elements (including hidden) to find
>> the one that corresponds to the index ;;;;;; returned by GetTagIndex()
>> function (only visible elements). Also corrects for fact that DOM
>> collection is ;;;;;; zero-based
>>
>> For i=0 to oTags.length-1
>>    If stringcompare(oTags(i).type,"hidden") then ;; a visible element
>>       let iIndex=iIndex+1
>>    endif
>>    If iIndex==jawstagindex then
>>       oElement=oTags(i)
>>    endif
>> EndFor
>> Return oElement
>>
>> EndFunction
>>
>>
>> On Wed, Aug 11, 2010 at 12:44 PM, Homme, James
>> <james.homme@xxxxxxxxxxxx>wrote:
>>
>>> Hi Travis,
>>> You are right about the line number thing. It reflects the number of
>>> lines in the virtual buffer. It has nothing to do with the document
>>> structure, unless the document forces the virtual buffer to display a
>> new line.
>>>
>>> Jim
>>>
>>> Jim Homme,
>>> Usability Services,
>>> Phone: 412-544-1810. Skype: jim.homme
>>> Internal recipients,  Read my accessibility blog. Discuss
>>> accessibility here. Accessibility Wiki: Breaking news and
>>> accessibility advice
>>>
>>> -----Original Message-----
>>> From: jawsscripts-bounce@xxxxxxxxxxxxx [mailto:
>>> jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Travis Roth
>>> Sent: Wednesday, August 11, 2010 9:08 AM
>>> To: jawsscripts@xxxxxxxxxxxxx
>>> Subject: [jawsscripts] Re: Finding DOM element at the virtual cursor
>>>
>>> If the GetTag functions return an index which represents the number of
>>> the tag as it occurs in the document, perhaps you can loop through
>>> until you find the element of that number in the document?
>>> I don't know if that's how the index works... But it seems a better
>>> chance than the column and row count which I think is just a JAWS
>>> thing. I
>> suspect
>>> if you use the verbosity settings to change the line length of the
>>> virtual buffr you will find those numbers change which would indicate
>>> its just a JAWS stat.
>>>
>>> So that'd leave hoping a tag index works. Or doing some serious
>>> hacking such as with GreaseMonkey scripts in Firefox to add an ID to
>>> every element...
>>>
>>>
>>> -----Original Message-----
>>> From: jawsscripts-bounce@xxxxxxxxxxxxx
>>> [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of jaws tech
>>> Sent: Tuesday, August 10, 2010 10:48 PM
>>> To: jawsscripts@xxxxxxxxxxxxx
>>> Subject: [jawsscripts] Re: Finding DOM element at the virtual cursor
>>>
>>> I need a generic way to do this because the element that I am on may
>>> not have unique id or name information.  In fact the only thing that
>>> may come up for the elements I'm after are colspan=1 and one other one
>>> that I don't remember.  But those are not unique values.
>>> The GetTag functions only return an index not an object reference to
>>> an element.  I need to get an element as an object variable so I can
>>> then
>> work
>>> within DOM functions.  Something like:
>>>
>>> oElement=insert code that I'm looking for
>>> saystring(oElement.innertext) (or some other DOM method/property)
>>>
>>> Like I said I prefer working in the DOM.  It is much more
>> powerful/flexible
>>> than working with the JAWS functions.
>>>
>>> I was originally thinking of using the virtual cursor column position
>>> if that were in fact the sourceindex and then use code such as:
>>>
>>> iCol=GetCursorcol()
>>> oIE=IEGetCurrentDocument()
>>> oElement=oIE.all(iCol)
>>>
>>> But this wasn't working for some reason.  In fact, I don't even think
>>> I
>> was
>>> succeeding in getting the "all" collection.  And as I alluded to in my
>>> original post, I don't know if the virtual cursor column represents
>>> the sourceindex of the document or not.
>>>
>>> Any other ideas??
>>>
>>>
>>>
>>> On Tue, Aug 10, 2010 at 9:53 PM, Chad Foster <chad.foster@xxxxxxxxxx>
>>> wrote:
>>>
>>> > Check out the GetTag functions. They can help you locate tags and
>>> > corresponding indices.
>>> >
>>> > On 8/10/10, Travis Roth <travis@xxxxxxxxxxxxxx> wrote:
>>> > > I've not tried it, but I'd suggest looking at the
>>> > > GetElementDescription() function and seeing if you can parse out
>>> > > the
>> ID
>>> or name attribute.
>>> > > If an element doesn't have either of those its going to be
>>> > > difficult to
>>> > find
>>> > > in the DOM with JavaScript...
>>> > >
>>> > >
>>> > > -----Original Message-----
>>> > > From: jawsscripts-bounce@xxxxxxxxxxxxx
>>> > > [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of jaws tech
>>> > > Sent: Tuesday, August 10, 2010 5:45 PM
>>> > > To: jawsscripts@xxxxxxxxxxxxx
>>> > > Subject: [jawsscripts] Finding DOM element at the virtual cursor
>>> > >
>>> > > Hi All.
>>> > > I would like to find a reliable way to find the DOM element
>>> > > corresponding
>>> > to
>>> > > the current virtual cursor position.  I like to jump into the DOM
>>> > > when
>>> > doing
>>> > > IE scripting instead of the JAWS functions and I need a way to
>>> > > grab the current element.  As most of you already know the
>>> > > GetFocusedElement() functions just grab wherever the PC cursor is
>>> > > and have nothing to do with JAWS'
>>> > > virtual buffer.  Also, can someone explain the significance of the
>>> > > row
>>> > and
>>> > > column output of the Virtual cursor's position.  The column
>>> > > position
>>> > seems
>>> > > to correspond to the source index but I'm not sure what the row
>>> > > might represent??  Understanding this might shed some light on
>>> > > getting into the DOM.
>>> > >
>>> > > Thanks
>>> > >
>>> > >
>>> > > __________
>>> > >
>>> > > View the list's information and change your settings at
>>> > > //www.freelists.org/list/jawsscripts
>>> > >
>>> > >
>>> > > __________
>>> > >
>>> > > View the list's information and change your settings at
>>> > > //www.freelists.org/list/jawsscripts
>>> > >
>>> > >
>>> >
>>> >
>>> > --
>>> > Chad Foster
>>> > Access Technology Solutions
>>> > Leveling The Playing Field Through Technology
>> http://www.GO-ATS.net<http://www.go-ats.net/>
>>> > __________
>>> >
>>> > View the list's information and change your settings at
>>> > //www.freelists.org/list/jawsscripts
>>> >
>>> >
>>>
>>> __________
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>>
>>> __________
>>> O
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>>
>>> This e-mail and any attachments to it are confidential and are
>>> intended solely for use of the individual or entity to whom they are
>>> addressed.  If you have received this e-mail in error, please notify
>>> the sender
>> immediately
>>> and then delete it.  If you are not the intended recipient, you must
>>> not keep, use, disclose, copy or distribute this e-mail without the
>>> author's prior permission.  The views expressed in this e-mail message
>>> do not necessarily represent the views of Highmark Inc., its
>>> subsidiaries, or affiliates.
>>>  __________
>>>
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/jawsscripts
>>>
>>>
>>
>> __________
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>>
>> This email is confidential and should not be used by anyone who is not
>> the original intended recipient. Prudential cannot accept liability
>> for statements made which are clearly the sender's own and not made
>> on behalf of the Prudential. In addition, no statement should be
>> construed as giving investment advice within or outside the United
>> Kingdom
>>
>> Prudential plc, incorporated and registered in England and Wales.
>> Registered Office at Laurence Pountney Hill, London, EC4R 0HH.
>> Registered number 1397169. Prudential plc is a holding company,
>> subsidiaries of which are authorised and regulated by the Financial
>> Services Authority (FSA)
>>
>> 'Prudential' is a trading name of The Prudential Assurance Company
>> Limited, which is incorporated and registered in England and Wales.
>> Registered Office at Laurence Pountney Hill, London, EC4R 0HH.
>> Registered number 15454. Authorised and regulated by the Financial
>> Services Authority. 'Prudential' is also used by other companies within
>> the Prudential Group, which between them provide a range of financial
>> products including life assurance, pensions, savings and investment
>> products
>>
>> 'Prudential' is also a trading name of Prudential Distribution Limited,
>> which is incorporated and registered in Scotland.  Registered Office at
>> Craigforth, Stirling, FK9 4UE.  Registered number SC212640. Authorised
>> and regulated by the Financial Services Authority.
>>
>> A list of other Prudential companies together with their registered
>> statutory details can be found in 'About Prudential' on </font><a
>> href="http://www.prudential.co.uk/prudential-plc/aboutpru/groupcompanies/";
>> style="color: blue; text-decoration: underline; text-underline:
>> single"><span style="font-size:
>> 9pt">http://www.prudential.co.uk</span></a></span></p>
>>
>> An email reply to this address may be subject to interception or
>> monitoring for operational reasons or for lawful business practices.
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>>
>>
>> This email is confidential and should not be used by anyone who is not
>> the original intended recipient. Prudential cannot accept liability
>> for statements made which are clearly the sender's own and not made
>> on behalf of the Prudential. In addition, no statement should be
>> construed as giving investment advice within or outside the United
>> Kingdom
>>
>> Prudential plc, incorporated and registered in England and Wales.
>> Registered Office at Laurence Pountney Hill, London, EC4R 0HH.
>> Registered number 1397169. Prudential plc is a holding company,
>> subsidiaries of which are authorised and regulated by the Financial
>> Services Authority (FSA)
>>
>> 'Prudential' is a trading name of The Prudential Assurance Company
>> Limited, which is incorporated and registered in England and Wales.
>> Registered Office at Laurence Pountney Hill, London, EC4R 0HH.
>> Registered number 15454. Authorised and regulated by the Financial
>> Services Authority. 'Prudential' is also used by other companies within
>> the Prudential Group, which between them provide a range of financial
>> products including life assurance, pensions, savings and investment
>> products
>>
>> 'Prudential' is also a trading name of Prudential Distribution Limited,
>> which is incorporated and registered in Scotland.  Registered Office at
>> Craigforth, Stirling, FK9 4UE.  Registered number SC212640. Authorised
>> and regulated by the Financial Services Authority.
>>
>> A list of other Prudential companies together with their registered
>> statutory details can be found in 'About Prudential' on </font><a
>> href="http://www.prudential.co.uk/prudential-plc/aboutpru/groupcompanies/";
>> style="color: blue; text-decoration: underline; text-underline:
>> single"><span style="font-size:
>> 9pt">http://www.prudential.co.uk</span></a></span></p>
>>
>> An email reply to this address may be subject to interception or
>> monitoring for operational reasons or for lawful business practices.
>>
>> __________�
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
>
> __________�
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
> 

__________�

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: