This document is for use with Jaws 8.0 and all 8.0 service packs, as well as Jaws 9.0 and 10.0. Use of these scripts are governed by Oracle Terms of Use available at http://www.oracle.com/html/terms.html Overview Script for reading E1 tables There are essentially two separate scripts in one function that perform the table previous and next column reading. Each script must first determine whether the user is in a table and if so, then must store the table ( column and row positions) in memory variables. If no table is detected then an error message is given stating “Not in a table”. The script then does a get command using the coordinates of the row and column variables which if equal to zero, will use position one for each, row and column respectably. Since the reading of the table is in a loop, the script will continue to read up or down the column/row until the end of the table is reached. Then it will cycle back to the top of the table and/or the bottom of the table depending on which way the user is going and start over again. The control keys for this event are (Windows+N) reading from top to bottom and (Windows+Shift+N) for reading from bottom to top. However, these keys can be defined by the user to fit their own needs. Instructions The two scripts reside in this text document so copying into the current version of Internet Explorer will be no problem. Each script will have a begin copy line and an end copy line. Note: Do not include those lines when cutting and pasting the scripts into the IE script. 1. Copy the first script to the clip board, copy from just below the “Begin Copy,: to just above the “End Copy” of script one. 2. Open an Internet session and press “JawsKey+0”. This will open the script manager. 3. Press Ctrl+End to get to the bottom of the script then press Enter twice, to leave some blank lines. 4. Paste in the first script. Press Ctrl+S to save the script, if you have followed these steps correctly there will be no errors. 5. After saving is successful, press Ctrl+End, then arrow up until you are in the script. If you are just below the "Date Written," you are fine. 6. Now Press CTRL+D, tab past the script name into the synopsis and type a meaningful description of what the script will do. This is what you will hear when getting Jaws keyboard help. In the next description field, you can give more details. Tab to the "Assign to hotkey," and assign a key stroke, (Windows+N). 7. Follow the same steps above for the second script. Assign the key stroke to (Windows+Shift+N) and do a final save. SCRIPTS Begin Copy Script one; (do not copy this line). void function DetectTableWhenNavigating(int iPrevTableIndex, int iPrevTableLevel) var int iCurTableLevel, int iCurTableIndex if InTable() then let iCurTableLevel = GetTableNestingLevel() let iCurTableIndex = GetTableIndex() if iCurTableLevel < iPrevTableLevel then ; we've moved out of a nested table SayUsingVoice(VCTX_MESSAGE,CMSGOutOfTable, OT_POSITION) ElIf iCurTableLevel > iPrevTableLevel || (iCurTableIndex && iCurTableIndex != iPrevTableIndex) then ;we've moved into a table, announce it SayUsingVoice(VCTX_MESSAGE, formatString(CMSGInTable,GetTableCaption()), OT_CONTROL_GROUP_NAME) SayTableCellCoordinates() EndIf else ;not in a table if iPrevTableIndex then ; we've moved out of a top-level table SayUsingVoice(VCTX_MESSAGE,CMSGOutOfTable, OT_POSITION) EndIf endIf EndFunction Script ReadSameColumnNextTable () ; Written by Don Mauck ; Date Written 04/09/2008 ; Copyright (c) 2008 by Oracle USA Var int iPrevTableLevel, int iPrevTableIndex, String sListOfTables, String sDelimiter, Int iTableIndex, Int iTableColumn, Int iTableRow, int iTableIndexMin, int iTableIndexMax if InTable() then let iPrevTableLevel = GetTableNestingLevel() let iPrevTableIndex = GetTableIndex() elif (FALSE == InTable ()) then SayFormattedMessage (OT_error, cMSGNotInTable_L, cMSGNotInTable_S) ; Not in a table Return EndIf let sDelimiter = "|" GetCellCoordinates(iTableColumn, iTableRow) let sListOfTables = GetListOfTables(sDelimiter) if StringContains (SListOfTables, "QBE") then let iTableIndexMin = 2 else let iTableIndexMin = 1 endif let iTableIndexMax = StringSegmentCount(sListOfTables, sDelimiter) - 1 let iTableIndex = GetTableIndex() if iTableIndex >= iTableIndexMax then while iTableIndex > iTableIndexMin MoveToTable(S_PRIOR) let iTableIndex = iTableIndex - 1 endwhile SayFormattedMessage(OT_STATUS,cmsgWrappingToTop_L,cmsgWrappingToTop_S) beep() else MoveToTable(S_NEXT) endif MoveToTableCell(iTableColumn, iTableRow) SayCell () EndScript End Copy Script One; (do not copy this line). Begin Copy Script Two; (Do not copy this line). Script ReadSameColumnPreviousTable () ; Written by Don Mauck ; Date Written 04/09/2008 ; Copyright (c) 2008 by Oracle USA Var int iPrevTableLevel, int iPrevTableIndex, String sListOfTables, String sDelimiter, Int iTableIndex, Int iTableColumn, Int iTableRow, int iTableIndexMax, int iTableIndexMin if InTable() then let iPrevTableLevel = GetTableNestingLevel() let iPrevTableIndex = GetTableIndex() elif (FALSE == InTable ()) then SayFormattedMessage (OT_error, cMSGNotInTable_L, cMSGNotInTable_S) ; Not in a table Return EndIf let sDelimiter = "|" GetCellCoordinates(iTableColumn, iTableRow) let sListOfTables = GetListOfTables(sDelimiter) if StringContains (SListOfTables, "QBE") then let iTableIndexMin = 2 else let iTableIndexMin = 1 endif let iTableIndexMax = StringSegmentCount(sListOfTables, sDelimiter) - 1 let iTableIndex = GetTableIndex() if iTableIndex <= iTableIndexMin then while iTableIndex < iTableIndexMax MoveToTable(S_NEXT) let iTableIndex = iTableIndex + 1 endwhile sayFormattedMessage(OT_STATUS,cmsgWrappingToBottom_L,cmsgWrappingToBottom_S) beep() else MoveToTable(S_PRIOR) endif MoveToTableCell(iTableColumn, iTableRow) SayCell () EndScript End Copy Script Two; (do not copy this line).