                 Chapter 15: Widget Routines

DISLIN offers some routines for creating  graphical user in-
terfaces in Fortran and C programs.  The routines are called
widget routines and use the Motif widget libraries.

There are sets of  routines in  DISLIN  for creating  single
widgets, for setting parameters, for requesting current wid-
get values selected by the user and for creating dialogs.

Routines for creating single widgets begin  with the charac-
ters 'WG',  parameter setting routines  with the  characters
'SWG',  requesting  routines  with the characters  'GWG' and
dialog routines with the characters 'DWG'.

Normally,  creating widget  and parameter  setting  routines
should be used  between the routines  WGINI and  WGFIN while
requesting routines can be called after WGFIN, or in a call-
back routine. Dialog routines can be used independently from
the routines WGINI and WGFIN.

15.1 Widget Routines

                          W G I N I

The routine  WGINI initializes the widget routines and crea-
tes a main widget.

The call is:  CALL  WGINI  (COPT, ID)

COPT          is a character string  that defines  how chil-
              dren  widgets are laid out in the main widget:
  = 'VERT'    means that children  widgets are  laid out  in
              columns from top to bottom.
  = 'HORI'    means that  children widgets are  laid out  in
              rows from left to right.
  = 'FORM'    means that the  position  and size of children
              widgets is defined by the user with the routi-
              nes SWGPOS, SWGSIZ and SWGWIN.
ID            is the returned widget index.  It can  be used
              as a  parent  widget  index  in  other  widget
              calls.


                          W G F I N

WGFIN terminates  the widget routines.  The widgets  will be
displayed on the screen. After choosing OK in the Exit menu,
all widgets are deleted  and the program  is continued after
WGFIN.  After choosing Quit in the Exit menu, the program is
terminated.

The call is:  CALL  WGFIN

                          W G B A S

The routine WGBAS creates a container widget. It can be used
as a parent widget for other widgets.

The call is:  CALL  WGBAS  (IP, COPT, ID)

IP            is the index of the parent widget.
COPT          is a character string that can have the values
              'HORI',  'VERT' and 'FORM'.  It determines how
              children widgets are laid out in the container
              widget (s. WGINI).
ID            is the returned  widget index.  It can be used
              as  a  parent  widget  index  in other  widget
              calls.

                          W G P O P

The routine WGPOP creates a popup menu in the menubar of the
main widget.  Entries in the popup menu must be created with
WGAPP.

The call is:  CALL WGPOP (IP, CLAB, ID)

IP            is the index  of the parent widget  where  the
              parent widget must be created with WGINI.
CLAB          is a character  string containing the title of
              the popup menu.
ID            is the  returned widget index.  It can be used
              as a parent widget index for WGAPP. 

                          W G A P P

The routine WGAPP creates an entry in a popup menu. The pop-
up menu be created with the routine WGPOP.

The call is:  CALL WGAPP (IP, CLAB, ID)
      
IP            is the  index  of a  popup  menu  created with 
              WGPOP.
CLAB          is a character string containing a label.
ID            is the  returned  widget  index.  It should be
              connected with a callback routine (see SWGCB).

                          W G L A B

The routine WGLAB creates a label widget.  The widget can be
used to display a character string.

The call is:  CALL  WGLAB  (IP, CSTR, ID)
IP            is the index of the parent widget.
CSTR          is  a  character  string  that  should be dis-
              played.
ID            is the returned widget index.

                          W G B U T

The routine WGBUT creates a button widget. The widget repre-
sents a labeled button  that the user can turn on  or off by
clicking.

The call is:  CALL  WGBUT  (IP, CLAB, IVAL, ID)
IP            is the index of the parent widget.
CLAB          is a character string  that will be used  as a
              label.
IVAL          can have the values 0 (off)  and 1 (on) and is
              used to initialize the button.
ID            is the returned widget index.

                          W G T X T

The routine WGTXT creates a text widget.  The widget  can be
used to get text from the keyboard.

The call is:  CALL  WGTXT  (IP, CSTR, ID)

IP            is the index of the parent widget.
CSTR          is a character string  that will  be displayed
              in the text widget.
ID            is the returned widget index.

                          W G L T X T

The routine WGLTXT creates a labeled text widget. The widget
can be used get text from the keyboard.

The call is:  CALL WGLTXT (IP, CLAB, CSTR, NWTH, ID)

IP            is the index of the parent widget.
CLAB          is a character  string containing  a label. It
              will be displayed on the left side of the wid-
              get.
CSTR          is a character string  that will be  displayed
              in the text widget.
NWTH          defines the width of the text field (0 <= NWTH 
              <= 100). For example, NWTH = 30 means that the 
              width of the text field is 0.3 * widget width.  
ID            is the returned widget index.

                          W G F I L

The routine  WGFIL creates a file widget.  The widget can be
used to get a  filename from the keyboard.  The filename can
be typed  directly  into the  file field  or can be selected
from a file selection box  if an entry  in the File menu  is
chosen.

The call is:  CALL  WGFIL  (IP, CLAB, CFIL, CMASK, ID)

IP            is the index of the parent widget.
CLAB          is a character string used for an entry in the
              File menu.
CFIL          is a character string  that will  be displayed
              in the file widget.
CMASK         specifies the search pattern  used in determi-
              ning the  files  to be displayed  in the  file
              selection box.
ID            is the returned widget index.

                          W G L I S

The routine WGLIS creates a list widget. This widget is used
whenever an application  must present  a list of  names from
which the user can choose.

The call is:  CALL  WGLIS  (IP, CLIS, ISEL, ID)

IP            is the index of the parent widget.
CLIS          is a character string  that contains  the list
              elements.  Elements  must be separated  by the 
              character '|'.
ISEL          defines the pre-selected element (>= 1).
ID            is the returned widget index.

                          W G B O X

The routine  WGBOX creates a list widget where the list ele-
ments are displayed as toggle buttons.

The call is:  CALL  WGBOX  (IP, CLIS, ISEL, ID)

IP            is the index of the parent widget.
CLIS          is a character string  that contains  the list
              elements. Elements  must be separated  by  the
              character '|'.
ISEL          defines the pre-selected element (>= 1).
ID            is the returned widget index.

                          W G S C L

The routine  WGSCL creates a scale widget. The widget can be
displayed in horizontal or vertical direction.

The call is:  CALL  WGSCL  (IP, CLAB, XMIN, XMAX, XVAL,
                                                   NDEZ, ID)
IP            is the index of the parent widget.
CLAB          is a character string used for a label.
XMIN          is a  floating-point  value  that defines  the
              minimal value of the scale widget.
XMAX          is a  floating-point  value  that defines  the
              maximal value of the scale widget.
XVAL          defines the value of the scale widget.
NDEZ          is the number of digits used in the scale wid-
              get.
ID            is the returned widget index.

                          W G O K

The routine WGOK creates a push button widget where the but-
ton has the same meaning as the  OK  entry in the Exit menu.
If the button is pressed,  all widgets are  deleted  and the
program is continued after WGFIN.

The call is:  CALL  WGOK  (IP, ID)

IP            is the index of the parent widget.
ID            is the returned widget index.

                         W G Q U I T

The routine  WGQUIT  creates a push button widget  where the
button has the same meaning as the  QUIT  entry  in the Exit
menu. If the button is pressed, the program is terminated.

The call is:  CALL WGQUIT (IP, ID)

IP            is the index of the parent widget.
ID            is the returned widget index.

                         W G P B U T

The routine WGPBUT creates a push button widget. 

The call is:  CALL WGPBUT (IP, CLAB, ID)

IP            is the index of the parent widget.
CLAB          is a character string  that will  be used as a
              label.
ID            is the  returned  widget  index.  It should be  
              connected with a callback routine.

                          W G C M D

The routine WGCMD creates a push button widget. A correspon-
ding system will be executed if the button is pressed. 

The call is:  CALL WGCMD (IP, CLAB, CMD, ID)
 
IP            is the index of the parent widget.
CLAB          is a character  string  that will be used as a
              label.
CMD           is a character string containing a system com-
              mand.
ID            is the  returned  widget  index.  It should be 
              connected with a callback routine.

15.2 Parameter Setting Routines

                          S W G W T H

The routine SWGWTH sets the default width of widgets.

The call is:  CALL SWGWTH (NWTH)

NWTH          in an integer  containing  a number of charac-
              ters.
                                         Default: NWTH = 20.
 
Note:         SWGWTH affects  widgets whose parents have the
              layouts 'VERT' and 'HORI'.     

                          S W G P O P

The routine  SWGPOP modifies the appearance of the popup me-
nubar.

The call is:  CALL SWGPOP (COPT)

COPT          is a character string containing an option:
 = 'NOOK'     suppresses the 'OK' entry in the  'EXIT' menu.
 = 'NOQUIT'   suppresses the  'QUIT'  entry  in  the  'EXIT'
              menu.
 = 'NOHELP'   suppresses the 'HELP' button in the menubar.
 = 'OK'       enables the 'OK' entry in the 'EXIT' menu (de-
              fault).
 = 'QUIT'     enables the  'QUIT'  entry in the  'EXIT' menu
              (default).
 = 'HELP'     enables the  'HELP' button in the menubar (de-
              fault).

                          S W G M O D

The widget routines can be used on X Window terminals and on
other terminals. Normally, the routine WGINI checks the ter-
minal type and uses an  ASCII mode on non X Window terminals
and widgets on  X Window terminals.  The routine  SWGMOD can
overwrite this behaviour.

The call is:  CALL  SWGMOD  (CMOD)

CMOD          is a character string containing the mode:
  = 'XWIN'    means that the widget routines should use wid-
              gets.  On a non X Window terminal, the program
              will be terminated in WGINI.
  = 'ASCI'    means that  the widget routines use  write and
              read  statements  instead of a  graphical user
              interface.
  = 'AUTO'    defines  'XWIN' on X Window terminals and 'AS-
              CI' on other terminals.
                                     Default: CMOD = 'AUTO'.

                          S W G T I T

The routine  SWGTIT  defines  a title  displayed in the main
widget.

The call is:  CALL  SWGTIT  (CTIT)

CTIT          is a character string containing the title.

                          S W G H L P

The routine SWGHLP sets a character string that will be dis-
played if the Help menu is clicked by the user.

The call is:  CALL SWGHLP (CSTR)

CSTR          is a character string  that will be  displayed
              in the help box. The character '|' can be used
              as a newline character.

                          S W G S I Z

The routine SWGSIZ defines the size of widgets.

The call is:  CALL  SWGSIZ  (NW, NH)

NW, NH        are the  width  and  height  of the  widget in
              pixels.

                          S W G P O S

The routine SWGPOS defines the position of widgets.

The call is:  CALL SWGPOS (NX, NY)

NX, NY        are the  upper  left  corner  of the widget in
              pixels.  The point  is relative  to  the upper 
              left corner of the parent widget.

                          S W G W I N

The routine SWGWIN defines the position and size of widgets.

The call is:  CALL SWGWIN (NX, NY, NW, NH)

NX, NY        are the  upper  left  corner  of the widget in
              pixels.  The point  is relative  to  the upper
              left corner of the parent widget.
NW, NH        are the  width  and  height  of the  widget in
              pixels.

                          S W G T Y P

The routine  SWGTYP  modifies the appearance of certain wid-
gets.

The call is:  CALL SWGTYP (CTYPE, CLASS)

CTYPE         is a character string containing a keyword:
  = 'VERT'    means  that  list elements  in box widgets  or
              scale widgets  will  be displayed  in vertical
              direction.
  = 'HORI'    means  that  list elements  in box widgets  or
              scale widgets  will be displayed in horizontal
              direction.
  = 'SCROLL'  means that scrollbars will be  created in list
              widgets.
  = 'NOSCR'   means that  no scrollbars  will  be created in
              list widgets.
  = 'AUTO'    means that scrollbars  will be created in list
              widgets  if the number  of elements is greater
              than 8.
CLASS         is a character  string  containing  the widget
              class where  CLASS can have the values 'LIST',
              'BOX'  and 'SCALE'.  If CLASS = 'LIST',  CTYPE
              can have the values  'AUTO', 'SCROLL' and 'NO-
              SCROLL'. If CLASS = 'BOX'  or CLASS = 'SCALE',
              CTYPE can have the values 'VERT' and 'HORI'.
                                Defaults:   ('VERT', 'BOX'),
                                          ('HORI', 'SCALE'),
                                           ('AUTO', 'LIST').

                          S W G J U S

The routine  SWGJUS defines the alignment of labels in label
and button widgets.

The call is:  CALL SWGJUS (CJUS, CLASS)

CJUS          is a character string defining the alignment:
  = 'LEFT'    means that  labels  will  be displayed  on the
              left side of label and button widgets.
  = 'CENTER'  means  that labels  will  be displayed  in the
              center of label and button widgets.
  = 'RIGHT'   means  that labels  will  be displayed  on the
              right side of label and button widgets.
CLASS         is a  character  string  defining  the  widget
              class.  CLASS can have the values  'LABEL' and
              'BUTTON'.
                               Defaults:  ('LEFT', 'LABEL'),
                                         ('LEFT', 'BUTTON').

                          S W G M R G

The routine SWGMRG defines margins for widgets.

The call is:  CALL SWGMRG (IVAL, CMRG)

IVAL          is the margin value in pixels.
CMRG          is a character string that can have the values
              'LEFT',  'TOP',  'RIGHT'  and 'BOTTOM'. By de-
              fault, all margins are zero.

                          S W G M I X

The routine SWGMIX defines control characters for separating
elements in list strings.

The call is:  CALL SWGMIX (CHAR, CMIX)

CHAR          is a new control character.
CMIX          is a  character string  that defines the func-
              tion  of the control character.  CMIX can have
              the value 'SEP'.

                          S W G C B

The routine SWGCB connects a widget with a callback routine.
The callback routine is called  if the status  of the widget
is changed.  Callback routines be defined for button,  push-
button,  file,  list,  box and text widgets,  for popup menu
entries.
  
The call is:  CALL SWGCB (ID, ROUTINE, IRAY)

ID            is a widget ID.
ROUTINE       is the name  of a routine defined by the user. 
              In Fortran,  the routine  must be declared  as
              EXTERNAL.
IRAY          is an integer  array  that will be passed as a
              parameter  to the  callback routine. It can be
              used for  passing values in  C and  Fortran 77 
              programs. In Fortran 90 programs,  it's just a
              dummy array.
              
               
Note:         See section 15.6 for examples. 

                          S W G B U T

The routine SWGBUT sets the status of a button widget.

The call is:  CALL SWGBUT (ID, IVAL)

ID            is a widget ID of a button widget.
IVAL          can have the values 0 and 1.

                          S W G L I S

The routine SWGLIS changes the selection in a list widget.

The call is:  CALL SWGLIS (ID, ISEL)

ID            is a widget ID of a list widget.
ISEL          defines the selected element (>= 1).

                          S W G B O X

The routine SWGBOX changes the selection in a box widget.

The call is:  CALL SWGBOX (ID, ISEL)

ID            is a widget ID of a box widget.
ISEL          defines the selected element (>= 1).

                          S W G T X T

The routine SWGTXT changes the value of a text widget.

The call is:  CALL SWGTXT (ID, CVAL)

ID            is a widget ID of a text widget.
CVAL          is a character string containing the new text.

                          S W G F I L

The routine SWGFIL changes the value of a file widget.

The call is:  CALL SWGFIL (ID, CFIL)

ID            is a widget ID of a file widget.
CFIL          is a character string containing the new file-
              name.

                          S W G S C L

The routine SWGSCL changes the value of a scale widget.

The call is:  CALL SWGSCL (ID, XVAL)

ID            is a widget ID of a scale widget.
XVAL          is a floatingpoint number containing the new 
              value of the scale widget.
          
15.3 Requesting Routines

Requesting routines  can be used to request the current wid-
get values selected by the user. The routines must be called
after WGFIN.

                          G W G B U T

The routine GWGBUT returns the status of a button widget.

The call is:  CALL  GWGBUT  (ID, IVAL)

ID            is the index of the button widget.
IVAL          is the  returned status  where  IVAL = 0 means
              off and IVAL = 1 means on.

                          G W G T X T

The routine GWGTXT returns the input of a text widget.

The call is:  CALL  GWGTXT  (ID, CSTR)

ID            is the index of the text widget.
CSTR          is the returned character string.

                          G W G F I L

The routine GWGFIL returns the input of a file widget.

The call is:  CALL GWGFIL (ID, CFIL)

ID            is the index of the file widget.
CFIL          is the returned filename.

                          G W G L I S

The routine  GWGLIS  returns the selected element  of a list
widget.

The call is:  CALL GWGLIS (ID, ISEL)

ID            is the index of the list widget.
ISEL          is the  selected list element returned by GWG-
              LIS.

                          G W G B O X

The routine  GWGBOX  returns  the selected  element of a box
widget.

The call is:  CALL GWGBOX (ID, ISEL)

ID            is the index of the box widget.
ISEL          is the selected element returned by GWGBOX.

                          G W G S C L

The routine GWGSCL returns the value of a scale widget.

The call is:  CALL GWGSCL (ID, XVAL)

ID            is the index of the scale widget.
XVAL          is the returned value.

15.4 Utility Routines

                          G E T D S P

The routine GETDSP returns the terminal type.

The call is:  CALL GETDSP (CDSP)

CDSP          is a  returned character string  that can have
              the values  'XWIN'  for X Window terminals and
              'NOXW' for non X Window terminals.

                          I T M S T R

The routine  ITMSTR  extracts  a list  element  from  a list
string.

The call is:  CALL ITMSTR (CLIS, IDX, CITEM)

CLIS          is a character  string  that contains the list
              elements (s. WGLIS).
IDX           is the index of the element that should be ex-
              tracted from CLIS.
CITEM         is a character string containing the extracted
              list element.

                          I T M C N T

The routine  ITMCNT returns the number of elements in a list
string.

The call is:  N = ITMCNT (CLIS)

CLIS          is a  character string  that contains the list
              elements (s. WGLIS).
N             is the calculated number of elements in CLIS.

                          I T M C A T

The routine ITMCAT concatenates an element to a list string.

The call is:  CALL ITMCAT (CLIS, CITEM)

CLIS          is a character string  that contains  the list
              elements (s. WGLIS).
CITEM         is a character string  that will be concatena-
              ted to CLIS.  If CLIS is blank,  CITEM will be
              the first element in CLIS.

Note:         Trailing blanks is CLIS and CITEM  will be ig-
              nored.

                          M S G B O X

The routine  MSGBOX  displays a message  in form of a dialog
widget.  It can be used to display messages in callback rou-
tines.

The call is:  CALL MSGBOX (CSTR)

CSTR          is a character string containing a message.

                          S E N D O K

The routine SENDOK has the same meaning as when the OK entry
in the Exit menu is pressed. All widgets are deleted and the
program is continued after WGFIN.

The call is:  CALL SENDOK ()

15.5 Dialog Routines

Dialog routines are collections of widgets  that can be used
to display messages,  to get text strings,  to get filenames
from a file selection box  and to get selections from a list
of items. Dialog routines can be used independently from the
routines WGINI and WGFIN.

                          D W G M S G

The routine DWGMSG displays a message.

The call is:  CALL DWGMSG (CSTR)

CSTR          is a character string  that will  be displayed
              in a message box.  Multiple lines can be sepa-
              rated by the character '|'.

                          D W G B U T

The routine  DWGBUT  displays a message that can be answered
by the user with 'Yes' or 'No'.

The call is:  CALL DWGBUT (CSTR, IVAL)

CSTR          is a character string  that will  be displayed
              in a message box.  Multiple lines can be sepa-
              rated by the character '|'.
IVAL          is the returned answer  of the user.  IVAL = 1
              means 'Yes', IVAL = 0 means 'No'.

                          D W G T X T

The routine  DWGTXT creates a dialog widget that can be used
to prompt the user for input.

The call is:  CALL DWGTXT (CLAB, CSTR)

CLAB          is a character string  that will  be displayed
              in the dialog widget.
CSTR          is the returned input of the user.

                          D W G F I L

The routine  DWGFIL creates a file selection box that can be
used to get a filename.

The call is:  CALL DWGFIL (CLAB, CFIL, CMASK)

CLAB          is a character string  that will  be displayed
              in the dialog widget.
CFIL          is the returned filename selected by the user.
CMASK         specifies the search pattern  used in determi-
              ning  the files  to be displayed  in the  file
              selection box.

                          D W G L I S

The routine  DWGLIS creates a dialog widget that can be used
to get a selection from a list of items.

The call is:  CALL DWGLIS (CLAB, CLIS, ISEL)

CLAB          is a character string  that will be  displayed 
              in the dialog widget.
CLIS          is a character string  that contains  the list
              elements.  Elements  must  be separated by the
              character '|'.
ISEL          defines the  pre-selected element and contains
              the selected  element  after  return.  Element
              numbering begins with the number 1.

15.6 Examples

The following  short  program  creates  some widgets and re-
quests values of the widgets.

      PROGRAM EXA1 
      CHARACTER*80 CL1,CFIL

      CL1='Item1|Item2|Item3|Item4|Item5'
      CFIL=' '

      CALL SWGTIT ('EXAMPLE 1')
      CALL WGINI  ('VERT', IP)

      CALL WGLAB  (IP, 'File Widget:', ID)
      CALL WGFIL  (IP, 'Open File', CFIL, '*.c', ID_FIL)

      CALL WGLAB  (IP, 'List Widget:', ID)
      CALL WGLIS  (IP, CL1, 1, ID_LIS)

      CALL WGLAB  (IP, 'Button Widgets:', ID)
      CALL WGBUT  (IP, 'This is Button 1', 0, ID_BUT1)
      CALL WGBUT  (IP, 'This is Button 2', 1, ID_BUT2)

      CALL WGLAB  (IP, 'Scale Widget:', ID)
      CALL WGSCL  (IP, ' ', 0., 10., 5., 1, ID_SCL)

      CALL WGOK   (IP, ID_OK)
      CALL WGFIN

      CALL GWGFIL (ID_FIL, CFIL)
      CALL GWGLIS (ID_LIS, ILIS)
      CALL GWGBUT (ID_BUT1, IB1)
      CALL GWGBUT (ID_BUT2, IB2)
      CALL GWGSCL (ID_SCL, XSCL)
      END


The  next  example  displays some widgets packed in two col-
umns.
   
      PROGRAM EXA2 
      CHARACTER*80 CL1,CSTR

      CL1='Item1|Item2|Item3|Item4|Item5'
      CSTR=' '

      CALL SWGTIT ('EXAMPLE 2')
      CALL WGINI  ('HORI', IP)
      CALL WGBAS  (IP, 'VERT', IPL)
      CALL WGBAS  (IP, 'VERT', IPR)

      CALL WGLAB  (IPL, 'Text Widget:', ID)
      CALL WGTXT  (IPL, CSTR, ID_TXT1)
      CALL WGLAB  (IPL, 'List Widget:', ID)
      CALL WGLIS  (IPL, CL1, 1, ID_LIS)
      CALL WGLAB  (IPR, 'Labeled Text Widget:', ID)
      CALL WGLTXT (IPR, 'Give Text:', CSTR, 40, ID_TXT2)
      CALL WGLAB  (IPR, 'Box Widget:', ID)
      CALL WGBOX  (IPR, CL1, 1, ID_BOX)

      CALL WGQUIT (IPL, ID_OK)
      CALL WGOK   (IPL, ID_OK)
      CALL WGFIN
      END


The following example explains the use of callback routines.
A list widget is created  and the  selected list element  is 
displayed in a text widget.

      PROGRAM EXA3
      COMMON /LIST/ CLIS
      INTEGER IRAY(10)
      CHARACTER*80 CLIS
      EXTERNAL MYSUB

      CLIS = 'Item 1|Item 2|Item 3|Item 4|Item 5'

      CALL WGINI  ('VERT', IP)
      CALL WGLIS  (IP, CLIS, 1, ID_LIS)
      CALL SWGCB  (ID_LIS, MYSUB, IRAY)
      IRAY(1) = ID_LIS
      CALL WGTXT  (IP, ' ', ID_TXT)
      IRAY(2)=ID_TXT
      CALL WGFIN
      END

      SUBROUTINE MYSUB (ID, IRAY)
C     ID   is the widget ID of WGLIS ( = ID_LIS)
C     IRAY is a user-defined integer array
  
      INTEGER IRAY(10)
      COMMON /LIST/ CLIS
      CHARACTER*80 CLIS, CITEM

      CALL GWGLIS (IRAY(1), ISEL)
      CALL ITMSTR (CLIS, ISEL, CITEM)
      CALL SWGTXT (IRAY(2), CITEM)
      END

The C coding of example 3 is given below:

#include <stdio.h>
#include "dislin.h"

void mysub (int ip, int *iray);

static char clis[] = "Item 1|Item 2|Item 3|Item 4|Item 5";

main()
{ int  ip, iray[10];

  swgtit ("Example 3");

  ip      = wgini  ("VERT");
  iray[0] = wglis (ip, clis, 1);
  swgcb (iray[0], mysub, iray);

  iray[1] = wgtxt (ip, " ");
  wgfin ();
}

void mysub (int id, int *iray)
{ int isel;
  char *citem;

  isel = gwglis (iray[0]);
  citem = itmstr (clis, isel);
  swgtxt (iray[1], citem);
}

Here is a Fortran 90 coding of example 3:

      MODULE GLBVAR
        IMPLICIT NONE
        INTEGER :: ID_TXT
        CHARACTER (LEN=80) :: CLIS
      END MODULE GLBVAR

      PROGRAM EXA3
      USE DISLIN
      USE GLBVAR
      IMPLICIT NONE

      INTERFACE
        SUBROUTINE MYSUB (ID,IDUMMY)
          IMPLICIT NONE
          INTEGER, INTENT (IN) :: ID
          INTEGER, INTENT (IN), DIMENSION (:) :: IDUMMY
        END SUBROUTINE MYSUB
      END INTERFACE   

      INTEGER :: IP,ID_LIS
      INTEGER, DIMENSION (2) :: IDUMMY

      CLIS = 'Item 1|Item 2|Item 3|Item 4|Item 5'
      CALL WGINI  ('VERT', IP)
      CALL WGLIS  (IP, CLIS, 1, ID_LIS)
      CALL SWGCB  (ID_LIS, MYSUB, IDUMMY)
      CALL WGTXT  (IP, ' ', ID_TXT)
      CALL WGFIN  ()
      STOP
      END PROGRAM EXA3

      SUBROUTINE MYSUB (ID,IDUMMY)
      USE DISLIN
      USE GLBVAR
      IMPLICIT NONE

      INTEGER, INTENT (IN) :: ID
      INTEGER, INTENT (IN), DIMENSION (:) :: IDUMMY

      INTEGER :: ISEL
      CHARACTER (LEN=80) :: CITEM 

      CALL GWGLIS (ID, ISEL)
      CALL ITMSTR (CLIS, ISEL, CITEM)
      CALL SWGTXT (ID_TXT, CITEM)
      RETURN
      END SUBROUTINE MYSUB

