# SAOImage/DS9 requests

There are two kinds of requests: get requests to retrieve some information or data from SAOImage/DS9 and set requests to send some data to SAOImage/DS9 or to set some of its parameters.

## Set requests

The general syntax to perform a set request to the current SAOImage/DS9 access point is:

SAOImageDS9.set(args...; data=nothing)

where args... are any number of arguments which will be automatically converted in a string where the arguments are separated by spaces. The keyword data may be used to specify the data to send with the request, it may be nothing (the default) or a Julia array. For instance, the following 3 calls will set the current zoom to be equal to 3.7:

SAOImageDS9.set(:zoom,:to,3.7)
SAOImageDS9.set("zoom to",3.7)
SAOImageDS9.set("zoom to 3.7")

where the last line shows the string which is effectively sent to SAOImage/DS9 via the XPA.set method in the 3 above cases.

As a special case, args... can be a single array to send to SAOImage/DS9 for being displayed:

SAOImageDS9.set(arr)

where arr is a 2D or 3D Julia array. SAOImage/DS9 will display the values of arr as an image (if arr is a 2D array) or a sequence of images (if arr is a 3D array) in the currently selected frame with the current scale parameters, zoom, orientation, rotation, etc. Keyword order can be used to specify the byte ordering. Keyword new can be set true to display the image in a new SAOImage/DS9 frame.

## Get requests

To perform a get request, the general syntax is:

SAOImageDS9.get([T, [dims,]] args...)

where the args... arguments are treated as for the SAOImageDS9.set method (that is converted into a single text string with separating spaces). Optional arguments T and dims are to specify the type of the expected result and, possibly, its list of dimensions.

If neither T nor dims are specified, the result of the SAOImageDS9.get(args...) call is an instance of XPA.Reply (see documentation about XPA.jl package for how to deal with the contents of such an instance).

The following methods can be used to issue a get request to the current DS9 access point depending on the expected type of result:

SAOImageDS9.get(Vector{UInt8}, args...)         -> buf
SAOImageDS9.get(String, args...)                -> str
SAOImageDS9.get(Vector{String}, args...;
delim=isspace, keepempty=false) -> arr
SAOImageDS9.get(Tuple{Vararg{String}}, args...;
delim=isspace, keepempty=false) -> tup

where args... are treated as for the SAOImageDS9.set method. The returned values are respectively a vector of bytes, a single string (with the last end-of-line removed if any), an array of strings (one for each line of the result and empty line removed unless keyword keepempty is set true), or an array of (non-empty) words.

If a single scalar integer or floating point is expected, two methods are available:

SAOImageDS9.get(Int, args...)    -> scalar
SAOImageDS9.get(Float, args...)  -> scalar

which return respectively an Int and a Float64.

To retrieve the array displayed by the current SAOImage/DS9 frame, do:

arr = SAOImageDS9.get(Array);

Keyword order can be used to specify the byte ordering.