Under normal conditions, TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr and TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa will
return an identifier for the requested cursor. If an error occurs in
creating the cursor, such as when _n_a_m_e_I_d refers to a non-existent file,
then NNNNoooonnnneeee is returned and an error message will be stored in _i_n_t_e_r_p-
>_r_e_s_u_l_t.
TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr and TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa maintain a database of all the
cursors they have created. Whenever possible, a call to TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr or
TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa will return an existing cursor rather than creating
a new one. This approach can substantially reduce server overhead, so
the Tk procedures should generally be used in preference to Xlib
procedures like XXXXCCCCrrrreeeeaaaatttteeeeFFFFoooonnnnttttCCCCuuuurrrrssssoooorrrr or XXXXCCCCrrrreeeeaaaatttteeeePPPPiiiixxxxmmmmaaaappppCCCCuuuurrrrssssoooorrrr, which create a
new cursor on each call.
The procedure TTTTkkkk____NNNNaaaammmmeeeeOOOOffffCCCCuuuurrrrssssoooorrrr is roughly the inverse of TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr. If
its _c_u_r_s_o_r argument was created by TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr, then the return value is
the _n_a_m_e_I_d argument that was passed to TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr to create the cursor.
If _c_u_r_s_o_r was created by a call to TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa, or by any other
mechanism, then the return value is a hexadecimal string giving the X
identifier for the cursor. Note: the string returned by TTTTkkkk____NNNNaaaammmmeeeeOOOOffffCCCCuuuurrrrssssoooorrrr
is only guaranteed to persist until the next call to TTTTkkkk____NNNNaaaammmmeeeeOOOOffffCCCCuuuurrrrssssoooorrrr.
When a cursor returned by TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr or TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa is no
longer needed, TTTTkkkk____FFFFrrrreeeeeeeeCCCCuuuurrrrssssoooorrrr should be called to release it. There
should be exactly one call to TTTTkkkk____FFFFrrrreeeeeeeeCCCCuuuurrrrssssoooorrrr for each call to TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr
or TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa. When a cursor is no longer in use anywhere
(i.e. it has been freed as many times as it has been gotten)
TTTTkkkk____FFFFrrrreeeeeeeeCCCCuuuurrrrssssoooorrrr will release it to the X server and remove it from the
database.
BBBBUUUUGGGGSSSS
In determining whether an existing cursor can be used to satisfy a new
request, TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr and TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa consider only the
immediate values of their arguments. For example, when a file name is
passed to TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr, TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrr will assume it is safe to re-use an
existing cursor created from the same file name: it will not check to
see whether the file itself has changed, or whether the current directory
has changed, thereby causing the name to refer to a different file.
Similarly, TTTTkkkk____GGGGeeeettttCCCCuuuurrrrssssoooorrrrFFFFrrrroooommmmDDDDaaaattttaaaa assumes that if the same _s_o_u_r_c_e pointer
is used in two different calls, then the pointers refer to the same data;
it does not check to see if the actual data values have changed.