/* Copyright 1997 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/***************************************************/
/* File   : Forms.h                                */
/*                                                 */
/* Purpose: Functions to manage HTML forms.        */
/*                                                 */
/* Author : Merlyn Kline for Customer browser     */
/*          This source adapted by A.D.Hodgkinson  */
/*                                                 */
/* History: 28-Jan-97: Created.                    */
/***************************************************/

/* Various definitions */

typedef enum form_fieldtype
{
  form_text,
  form_password,
  form_checkbox,
  form_radio,
  form_select,
  form_textarea,
  form_image,
  form_submit,
  form_reset,
  form_button,
  form_file,
  form_hidden

} form_fieldtype;

typedef struct fv_select
{
  int  scroll;
  char selection[4];

} fv_select;

typedef union
{
  char      text[4];
  int       checked;
  fv_select select;

} form_field_value;

/* Miscellaneous definitions */

#define FE_PassCode "****************************************"

/* Function prototypes */

_kernel_oserror  * form_new_form               (browser_data * b, HStream * token);
_kernel_oserror  * form_discard                (browser_data * b);
_kernel_oserror  * form_put_field              (browser_data * b, HStream * token, char * value, int update);
_kernel_oserror  * form_new_field              (browser_data * b, HStream * token, form_fieldtype type, char * value);

form_field_value * form_get_field              (browser_data * b, HStream * token);
char             * form_get_field_text         (browser_data * b, HStream * token);
void               form_get_linesize           (BBox * fontbox, int * lh, int * lb);
void               form_abandon_menu           (void);

int                form_give_focus             (browser_data * b);

const char       * form_submission_information (browser_data * b, HStream * token, int * post);

_kernel_oserror  * form_click_field            (browser_data * b, HStream * token, int mode, int x, int y);
_kernel_oserror  * form_cancel_edit            (browser_data * b);
_kernel_oserror  * form_finish_edit            (browser_data * b);
const char       * form_button_text            (HStream * tp);
int                form_token_cursor_editable  (browser_data * b, HStream * token);
_kernel_oserror  * form_process_key            (browser_data * b, int * key);
void               form_select_menu_event      (WimpPollBlock * e);
void               form_check_caret            (browser_data * b);
void               form_caret_may_need_moving  (browser_data * b);

void               form_textarea_redraw        (browser_data * b, HStream * token, BBox * box, BBox * gw, int fh, int multiline, int password);