Provided by: libxpa-dev_2.1.18-4_amd64 bug

NAME

       XPAConvert -  Converting the XPA API to 2.0

SYNOPSIS

       This document describes tips for converting from xpa 1.0 (Xt-based xpa) to xpa 2.0
       (socket-based xpa).

DESCRIPTION

       The following are tips for converting from xpa 1.0 (Xt-based xpa) to xpa 2.0 (socket-based
       xpa). The changes are straight-forward and almost can be done automatically (we used
       editor macros for most of the conversion).

       •   The existence of the cpp XPA_VERSION directive to distinguish between 1.0 (where it is
           not defined) and 2.0 (where it is defined).

       •   Remove the first widget argument from all send and receive server callbacks.  Also
           change first 2 arguments from XtPointer to void *. For example:

           #ifdef XPA_VERSION static void XPAReceiveFile(client_data, call_data, paramlist, buf,
           len)
                void *client_data;
                void *call_data;
                char *paramlist;
                char *buf;
                int len; #else static void XPAReceiveFile(w, client_data, call_data, paramlist,
           buf, len)
                Widget w;
                XtPointer client_data;
                XtPointer call_data;
                char *paramlist;
                char *buf;
                int len; #endif

       •   Server callbacks should be declared as returning int instead of void. They now should
           return 0 for no errors, -1 for error.

       •   The mode flags have changed when defining XPA server callbacks.  The old S flag (save
           buffer) is replaced by freebuf=false.  The old E flag (empty buffer is OK) is no
           longer used (it was an artifact of the X implementation).

       •   Change NewXPACommand() to XPAcmdNew(), with the new calling sequence:

             xpa = NewXPACommand(toplevel, NULL, prefix, NULL);

           is changed to:

             xpa = XPACmdNew(xclass, name);

       •   Change the AddXPACommand() subroutine name to XPACmdAdd (with the same calling
           sequence):

             AddXPACommand(xpa, "file",
               "\tdisplay a new file\n\t\t  requires: filename",
               NULL, NULL, NULL, XPAReceiveFile, text, NULL);

           is changed to:

             XPACmdAdd(xpa, "file",
               "\tdisplay a new file\n\t\t  requires: filename",
               NULL, NULL, NULL, XPAReceiveFile, text, NULL);

       •   The XPAXtAppInput() routine should be called just before XtAppMainLoop() to add xpa
           fds to the Xt event loop:

             /* add the xpas to the Xt loop */
             XPAXtAddInput(app, NULL);

             /* process events */
             XtAppMainLoop(app);

       •   Change NewXPA() to XPANew() and call XPAXtAddInput() if the XtAppMainLoop routine
           already has been entered:

             xpa = NewXPA(saotng->xim->toplevel, prefix, xparoot,
                          "FITS data or image filename\n\t\t  options: file type",
                          XPASendData, new, NULL,
                          XPAReceiveData, new, "SE");

           is changed to:

             sprintf(tbuf, "%s.%s", prefix, xparoot);
             xpa = XPANew("SAOTNG", tbuf,
                          "FITS data or image filename\n\t\t  options: file type",
                          XPASendData, new, NULL,
                          XPAReceiveData, new, "SE");
             XPAXtAddInput(XtWidgetToApplicationContext(saotng->xim->toplevel), xpa);

       •   Change XPAInternalReceiveCommand() to XPACmdInternalReceive() remove first argument in
           the calling sequence):

             XPAInternalReceiveCommand(im->saotng->xim->toplevel,
                                       im->saotng, im->saotng->commands,
                                       "zoom reset", NULL, 0);

           is changed to:

             XPACmdInternalReceive(im->saotng, im->saotng->commands,
                                   "zoom reset", NULL, 0);

       •   Change DestroyXPA to XPAFree:

             DestroyXPA(im->dataxpa);

           is changed to:

             XPAFree(im->dataxpa);

SEE ALSO

       See xpa(7) for a list of XPA help pages