edited IsTextEditor Section so that it is easier to read, corrected wrong urls to IsTextEditor Section
# If '''"*curpos"''' exceeds the value of fieldlen, correct the '''"*curpos"''' so that cursor stands at the last position inside the field.
# If '''"*offset"''' is greater than the length of the string, set the '''"*offset"''' so the “last character of str” is hidden right before the first space in the field. (See '''“[[
OOP344 BIO 20101#IsTextEditor:|IsTextEditor]]”''' for more)
# After the above, if cursor is past the last character of '''“str”''', set '''"*curpos"''' so the cursor stands right after the last character of "str".
<u>Editing is terminated by pressing ENTER, TAB, UP, DOWN, PGUP, PGDN or any of the function keys (F1 to F12)</u>. Pressing<u>ESCAPE will terminate the iof_edit() and abort editing</u>: '''"str"'''will contain originally passed data when leaving function.
Note that the conditions of termination are changed if the '''“IsTextEditor”''' flag is true (non-zero). See '''“[[
OOP344 BIO 20101#IsTextEditor:|IsTextEditor]]”'''section for detail.
If '''"ReadOnly"''' has a true value (non-zero), then any attempt to change the content of '''"str"''' should end the function and return the key. Note that all other keys should work (Function and Non-ASCII keys). This makes the '''iof_edit()''' funciton "read only", but the user still can scroll the text to left or right and etc....
The function handles at least the following special keys:
* LEFT - move cursor left one character. If cursor is at the beginning of the field and there is hidden data before the cursor, then shift string to right instead.* RIGHT - move cursor right one character. If cursor is at the end of the field but not at the end of the string, then scroll one to left.* HOME – move cursor to the beginning of the string. Scroll all the way to right if necessary. (i.e. if there is hidden data at the beginning)* END - go to the end of the data in the string, i.e. just past the last character in the string. Scroll all the way to left if necessary.* DEL – eat the current character above the cursor and move all subsequent characters one position to the left.* BACKSPACE - move the rest of the field (including the cursor) one position to the left, eating the previous character.* TAB:
** if '''IsTextEditor''' is false, TAB will simply terminate the function like a Function key
** if '''IsTextEditor''' is true, TAB will insert CIO_TAB_SIZE number of spaces into the string.'''CIO_TAB_SIZE''' should be a defined "tab size" value in ciol.h. If '''CIO_TAB_SIZE''' spaces cannot be inserted into the string for any reason then the inputted tab should be ignored. (See
below for more about '''“[[ OOP344 BIO 20101#IsTextEditor:|IsTextEditor]]”''' flag)* ESCAPE - Terminates iof_edit() and aborts editing: '''"str"''' will contain originally passed data when leaving function. (See '''“[[ OOP344 BIO 20101#IsTextEditor:|IsTextEditor]]”''' for exception)* INSERT - toggle Insert/Overstrike mode< br />In Insert mode, printable characters are inserted into the string, moving the remainder of the string to the right to make room. In Overstrike mode, printable characters overwrite existing characters (if any). Note that if you are past the end of the string, printable characters are appended to the string (as long as the string isn't full) regardless of the mode. Also note that, regardless of the mode, the cursor advances as printable characters are typed into the string. Finally, if the cursor is at the end of the field, instead of moving to right, the characters are shifted to left.
If IsTextEditor is true, then it means that the function is being used to edit text by editing one line of text at a time. In this case, shifting a line to the left or right should not only cause the editing line to be shifted, but also the rest of the lines in the text. To do this, iof_edit() should let the calling function know that a shift has happened. Since shifting essentially means modifying '''“*offset”''' when '''“IsTextEditor”''' is true, and that there are times when you find that '''“*offset”''' needs to be modified, you should terminate the function afterwards. With termination, the function should return the terminating key.
Note that at the beginning of the execution of iof_edit(), validating '''*offset''' may require the value of '''*offset''' to change. If so, make sure to correct the offset and then terminate the function before any editing happens returning the default value of key.
function always shows blanks in any the part of the field that is not occupied by the data in the string.<u>UNDER NO CIRCUMSTANCES DOES THE FUNCTION CHANGE ANY POSITION ON THE SCREEN OUTSIDE OF THE FIELD</u>.
=== Selection Editor ===