function string_address (var str : [readonly] packed array [l..h:integer] of char) : integer; begin string_address := iaddress(str); end; { Calculate Button } Procedure Calculate_Button_Pressed; var s : varying [10] of char; i : integer; work_proc : Dwt$Work_Proc; client_data : Dwt$Opaque; args : array [1..2] of dwt$arg; begin writeln('in Calculate_Button_Pressed'); { Clear out the old entries in the list box } if interval_number > 0 then begin i := string_address('items'(0)); { Dwt$C_Nitems } args[1].dwt$a_arg_name := i::Dwt$Strng; args[1].dwt$l_arg_value := 0; i := string_address('itemsCount'(0)); { Dwt$C_NitemsCount } args[2].dwt$a_arg_name := i::Dwt$Strng; args[2].dwt$l_arg_value := 0; Xt$Set_Values (list_box, args, 2); interval_number := 0; end; { Update the input fields to reflect the values in use } writev(s,initial_loan:1); Dwt$S_Text_Set_String (input_fields[principal].widget, s); writev(s,interest_rate:1:2); Dwt$S_Text_Set_String (input_fields[rate].widget, s); writev(s,repayment_amount:1:2); Dwt$S_Text_Set_String (input_fields[payment].widget, s); i := iaddress(Calculate_One_Interval); work_proc := i::Dwt$Work_Proc; client_data := i::Dwt$Opaque; Xt$Add_Work_Proc (work_proc, client_data); end; end;