EDSPFLD_METHOD

Perform user field display

WTSupported in traditional Synergy on Windows
WNSupported in Synergy .NET on Windows
USupported on UNIX
VSupported on OpenVMS
subroutine EDSPFLD_METHOD
   a_input      ,a
   a_type       ,a
   a_text       ,a
   a_window     ,n
   a_fldnum     ,n
   a_dest       ,a
   a_attr       ,n
   a_color      ,n
   a_inpinfo    ,a

Arguments

a_input

The contents of the input field. (a)

a_type

The user_type string specified in the .FIELD USER qualifier. (a)

a_text

(optional) The user_text string specified in the .FIELD USER qualifier. (a)

a_window

The ID of the input window being processed. (n)

a_fldnum

Contains the internal field number of the current display field. (n)

a_dest

(optional) The data area in which to store the displayed data. If it is present, EDSPFLD_METHOD must load a_dest in storage format. (a)

a_attr

The attribute to apply to the display. (n)

a_color

The color to apply to the display. (n)

a_inpinfo

The structure of input information. (a)

Discussion

EDSPFLD_METHOD is a subroutine that you write and name. The name of your subroutine is registered with UI Toolkit using the E_METHOD subroutine.

Note

We recommend using an input field display method (%IDISPLAY_METHOD) instead of EDSPFLD_METHOD. Unlike EDSPFLD_METHOD, your %IDISPLAY_METHOD adds to Toolkit functionality rather than replaces it. %IDISPLAY_METHOD also provides access to the structure defined in inpinf.def and to the 20 optional arguments passed to I_INPUT and L_INPUT. See %IDISPLAY_METHOD for more information.

EDSPFLD_METHOD cannot populate a field that has a view length that’s shorter than the display length.

The UI Toolkit input subroutine calls your EDSPFLD_METHOD subroutine to display the contents of the current input field. It is also called after the ECHKFLD_METHOD subroutine validates the user‑defined input to display the validated data in the specified format. It is only called if the field definition uses the user_type argument in the .FIELD USER qualifier.

You will never call EDSPFLD_METHOD directly; it is called only by UI Toolkit.

The inpinf.def file defines a_inpinfo. See IARRIVE_METHOD for information.

S/DE Repository enables you to specify a subtype (or class) for user‑defined fields. The default subtype is alpha, but you can also specify numeric or date. To access this subtype within the Toolkit user‑defined processing routines, use the window ID and field number contained within the inputinfo structure (the a_inpinfo argument). Pass these two values to the I_FLDINF subroutine to retrieve the gs_inpfld structure (the controls argument) which contains the gs_class (user subtype) value. For user‑defined alpha fields; gs_class = 0; for user‑defined numeric fields, gs_class = 1; for user‑defined date fields, gs_class = 2.

To display the user‑defined input in a special format, you must call the Synergy DBL subroutine W_FLDS. The subroutine call can look like this:

xcall w_flds(a_window, WF_PUT, a_fldnum, display_text, WF_ATTR, a_fldnum, a_attr, WF_COLOR, a_fldnum, a_color)

where display_text is the specially formatted input to display in the input field.

EDSPFLD_METHOD works in conjunction with the ECHKFLD_METHOD and EEDTDSP_METHOD subroutines. The following steps occur for a user‑defined field:

1. When your program calls I_DISPLAY or I_DSPFLD, UI Toolkit also calls EDSPFLD_METHOD and passes it the field’s data in the format it was stored. EDSPFLD_METHOD displays the data in the field with the formatting you have specified in the EDSPFLD_METHOD subroutine.

For example, if you have written EDSPFLD_METHOD so that it formats all case “A” numbers with a dollar sign and a decimal point, it will display $350.00 when passed the stored data “350A.”

2. When the user selects the field for editing, UI Toolkit calls EEDTDSP_METHOD and passes it the data in storage format. The supplied EEDTDSP_METHOD displays the editable data in the stored format. If you want the editable data to display differently, you must write your own version of EEDTDSP_METHOD.

For example, once the user has selected the “350A” data for editing, your EEDTDSP_METHOD might re‑display the data as “350.” If you used the supplied version of EEDTDSP_METHOD, the editable data would display as “350A.”

3. After the user edits the data, UI Toolkit calls ECHKFLD_METHOD to validate the new data, determining if it meets all of your specified criteria. If ECHKFLD_METHOD validates the data, EDSPFLD_METHOD is called again to display the new data including the proper formatting.

If the user has changed “350” to “150,” ECHKFLD_METHOD is called and checks to make sure “150” is an acceptable entry for that field. If it is, EDSPFLD_METHOD displays “$150.00” in the field.

See also

Examples

The following example shows how you can use ECHKFLD_METHOD and EDSPFLD_METHOD to handle user‑defined field types. See the ECHKFLD_METHOD Discussion for a sample window script that corresponds with this example.

Note

See the ECHKFLD_METHOD Examples for an example that uses ECHKFLD_METHOD, EDSPFLD_METHOD, and EEDTSP_METHOD to validate and display a ZIP Code.

; Description:  Routines for handling user-defined field types
;
; Reprinted by permission of BancTec, Inc.
;
; Routines:
;      ECHKFLD_METHOD - Validation of user-defined types
;      EDSPFLD_METHOD - Display and storage of user-defined types
;
subroutine ECHKFLD_METHOD
; Description: Validate user-defined data types
; Arguments:
;      a_input      ,a     ;Text as input
      a_type       ,a     ;User-defined data type
      a_text       ,a     ;User text for field
      a_status     ,n     ;Returned status
      a_inpinfo    ,a     ;Input information
.include "WND:tools.def"
.align
record
       sts          ,i4   ;Decoding status
       yr           ,i4
       mo           ,i4
       da           ,i4
proc
  case a_type of
    begincase
      "MDYDATE ":call mdydate
    endcase
  else
    begin
      xcall u_message("Unrecognized user type "+a_type)
    end
  xreturn
;
; Description: Handle MM/DD/YY date format
;
mdydate,
  xcall u_dcddat(sts, a_input, 3,, yr, mo, da)
  if (sts) then
    a_status = D_DATERR
  else
    begin
      clear a_status
      a_input = %string(mo, "XX")+%string(da, "XX")+%string(yr,"XX")
    end
  return
endsubroutine
subroutine EDSPFLD_METHOD
;
; Description:  Handle display and storage of user-defined data types 
;
; Arguments:
  a_input       ,a      ;Contents of field
  a_type        ,a      ;User-defined type
  a_text        ,a      ;User text
  a_window      ,n      ;Input window ID
  a_fldnm       ,n      ;Display field number
  a_dest        ,a      ;Destination (optional)
  a_attr        ,n      ;Display attribute
  a_color       ,n      ;Display color
  a_inpinfo     ,a      ;Input information
;
.include "WND:tools.def"
.include "WND:windows.def"
;
record
  group yymmdd          ,d
        yy              ,d2
        mm              ,d2
        dd              ,d2
  endgroup
  buf           ,a8
;
proc
  case a_type of
   begincase
    "MDYDATE ":call mdydate
   endcase
  else
    begin
      xcall u_message("Unrecognized user type "+a_type)
    end
  xreturn
;
; Description: Display and store MM/DD/YY dates
;
mdydate,
  yy = a_input(5:2)
  mm = a_input(1:2)
  dd = a_input(3:2)
  xcall u_fmtdat(3, buf, yy, mm, dd)
  xcall w_flds(a_window, WF_PUT, a_fldnm, buf, WF_ATTR, 
&       a_fldnm, a_attr, WF_COLOR, a_fldnm, a_color)
  if (^passed(a_dest))
    a_dest(1:6) = a_input    ; To avoid clobbering following fields. Defined as d8, but stored as d6.
  return
endsubroutine