How can you set and determine a cursor position within an UFO Application?
Setting the Initial Cursor
The CURSOR field tells UFO where the initial cursor should be placed on the application screen, which is described by the Display Definition (DD). The field specified on the CURSOR field must correspond to one of the fields in the DD.
If you do not code an explicit field name, the initial cursor position will be the first unprotected screen field.
Below is a sample display of a DD that specifies positioning of the cursor at a field called "ACBKEY":
UFODD REVIEW/UPDATE/CREATE MODE=2 DISPLAY DEFINITIONS FUNCTION--> *
DISPLAY.. UFOACB STATUS. VML.. 3.20 DATE CHANGED 04/16/97
CONTINUED ALARM.. N AUTH. ON-LINE SOFTWARE INC TIME CHANGED 13:22:04.7
CURSOR... ACBKEY TERMINAL.... X001
PROCEDURE UFOONEOF DDXNAME OPERATOR....
ROW COL FOR- **NAME** ********* DESCRIPTION ********* US- F R ATT EDIT T
MAT AGE # # F D CD F F
01 1 1 F /MSG 0 0 0 8 00
02 3 1 /ACB 0 0 8 00 16
03 REVIEW/UPDATE/CREATE ACB'S 0 0 0 8 00 8
04 /FID FUNCTION-> 0 0 8 00
05 ACBKEYG N 0 0 0 8 00
06 6 1 ACBKEY ACB name....: 0 0 8 00 14
07 ACBSTAT Status.: 0 0 8 00 5
08 ACBLCHGD Date changed... 0 0 0 8 00
Setting Cursor within a UFO Application Procedure (PDS)
UFO provides methods for setting the cursor within a UFO application procedure (PDS). One method is via the /CURSOR keyword. You may use the /CURSOR keyword in your application procedure to dynamically override a cursor location that has been previously specified in the DD. To indicate a new cursor location, move the name of the field to /CURSOR.
Below are examples of MOVE statements that accomplish the same result. You can code the name as a character literal or the actual name of the field:
MOVE 'ACBSTAT' TO /CURSOR
or
MOVE ACBSTAT TO /CURSOR
After execution of either MOVE statement, the cursor will be positioned at the beginning of the field called "ACBSTAT" the next time the screen is displayed. The name placed in the /CURSOR keyword must be the name of a field defined in the DD, whether it is a data field or a work field. If the field is not defined in the DD, the cursor will be positioned at the first unprotected field on the screen. If there are no unprotected fields, the cursor will be positioned at row 1 column 1.
The second method of positioning the cursor is by using the /CURSORP keyword within a PDS. The /CURSORP keyword will dynamically override the cursor position with the value that you specify. This method takes some calculation on your part. You must first know the dimensions of the terminal model that you are using prior to setting the value. The MOVE statement is coded like this:
MOVE position TO /CURSORP
This formula can be used to determine the position value:
Position = (terminal-width ? 1) x (row-number ? minus 1) + column-number
For example, using a terminal model with a width of 80, to set the cursor position to be at row 2, column 11, you would need to perform the following calculation:
Position = (80 - 1) x (2 - 1) + 11
The result is the value 90. So, you would code the following move statement:
MOVE 90 TO /CURSORP
Determining the Current Position of the Cursor
CA UFO provides two PDS keywords, /CURSORC and /CURSORR, that allow you to determine the current location of the cursor. The /CURSORC keyword contains the number of the column and the /CURSORR keyword contains the number of the row where the cursor was positioned when the terminal operator pressed any interrupt key.
For detailed information on the CA UFO Display Definitions, cursor positioning, and procedure keywords, see Section 17 of the publication CA UFO Application Guide.