/*
 * NAME
 *	f77defs.h
 *
 * SYNOPSIS
 *
 *	#include "libgendb.h"
 *
 *
 * DESCRIPTION
 *
 *      FORTRAN data structure
 *
 * DIAGNOSTICS
 *
 *
 * FILES
 *
 *
 * NOTES
 *
 *
 * SEE ALSO
 *
 *
 * AUTHOR
 *	H. Turner
 */

#include "libgendb.h"

/*
 * SccsId: @(#)f77defs.h	16.1 8/3/93 Copyright (c) 1992-1993 Science Applications International Corporation
*/

/* one element in the Mapping array */
typedef struct column_name_addr{
	char *column_name;       /* name of the database column */
	void *addr;              /* address in FORTRAN space of the data */
	int  type;               /* type of the data */
	int  elem_size;          /* size of one data element */
	int  array_size;         /* size of data array */
	int  string_len;         /* length of a string */
	int  row_count;          /* indicates which row we're in */
	struct column_name_addr *next; /* pointer to the next mapping reference */
} Col_Name_Addr;


extern struct comtype 
{
	/* constants */
	int gdi_max_columns;
	int gdi_max_name;
	int gdi_max_type;
	int gdi_max_keyname;
	int gdi_error_size;
	int gdi_account_size;
	int gdi_dbname_size;
	int gdi_tablename_size;
	int gdi_node_size;
	

	/* dbDebug  */
	int gdi_debug_off;
	int gdi_debug_on;
	int gdi_debug_verbose;

	/* dbStatus   */
	int gdi_success;
	int gdi_failure;

	/* dbCtype */
	int gdi_undefined;
	int gdi_int2;
	int gdi_real4;	
	int gdi_string;
	int gdi_real8;	
	int gdi_char;
	int gdi_int4;


	/* dbLang */
	int gdi_sql;
	int gdi_postquel;
	
	/* dbFormat */
	int gdi_fixed_space;
	int gdi_delimited;
	
	/* misc. */
	int gdi_not_used;
	int gdi_no_chan;
	int gdi_default_chan;
	int gdi_select_chan;
	int gdi_update_chan;
	int gdi_insert_chan;
	int gdi_create_chan;
	int gdi_drop_chan;

	/* dbCorerce */
	int gdi_default_coerce;
	int gdi_double_coerce;
	int gdi_string_coerce;
	int gdi_dbl_str_coerce;
	
#if 0
	/* dbQuery */
	int rows_affected;
	int cmd_num;
	int more_rows;
	int status;
#endif	
	/* no connection, no mapping codes */
	int gdi_noconn;
	int gdi_nomap;

	/* dbErrLEv */
	int gdi_warning;
	int gdi_fatal;
	int gdi_noerror;
	
};

extern struct comtype gdicommon_;


/* prototypes for C callable functions */

Proto (int, add_db_conn, 
       (
	dbConn *conn
	));

Proto (dbConn *, get_db_conn, 
       (
	int conn
	));

Proto (int, initialize_db_conn, 
       (
	void
	));

Proto (void, remove_db_conn, 
       (
	int conn
	));

Proto (int, gdi_initialize_mapping,
       (
	void
	));

Proto (Col_Name_Addr *, retrieve_map,
       (
	int map
	));



/* prototypes for FORTRAN callable functions */

Proto (int, gdi_abort_, 
       (
	int *conn
	));

Proto (int, gdi_channel_is_open_, 
       (
	int *conn,
	int *channo
	));

Proto (int, gdi_close_channel_, 
       (
	int *conn,
	int *channo
	));

Proto (int, gdi_open_channel_, 
       (
	int *conn,
	int *channo
	));

Proto (int, gdi_flush_, 
       (
	int *conn,
	int *channo
	));

Proto (int, gdi_open_,
       (
	char *vendor, 
	char *account, 
	char *password, 
	char *database, 
	char *server, 
	char *appname,
	int  lvendor,
	int  laccount,
	int  lpassword,
	int  ldatabase,
	int  lserver,
	int  lappname

	));

Proto (int, gdi_get_node_,
       (
	int *conn, 
	char *node, 
	int  len
	));

Proto (int, gdi_close_,
       (
	int *conn
	));

Proto (dbObj *, gdi_obj_create_,
       (
	dbConstr *constr
	));

Proto (dbObj *, gdi_obj_destroy_,
       (
	dbObj *obj
	));

Proto (void, gdi_error_init_,
       (
	int *conn,
	int *debug,
	int *threshold,
	int *reserved1,
	int *reserved2
	));

Proto (void, gdi_error_get_,
       (
	int  *conn,
	int  *errcode,
	char *errtext,
	int  *maxtext,
	int  *status,
	int  *severity,
	int  errtext_len
	));

Proto (int, gdi_error_flags_,
       (
	int *conn,
	int *debug,
	int *threshold
	));

Proto (int, gdi_init_,
       (
	char *prog_name,
	int  len
	));

Proto (int, gdi_open_map_,
       (
	int  *conn
	));

Proto (void, gdi_close_map_,
       (
	int  *conn,
	int  *map
	));

Proto (void, gdi_destroy_map_,
       (
	int  *conn,
	int  *map_id
	));

Proto (int, gdi_add_map_field_,
       (
	int  *conn,
	int  *map_id,
	char *column_name,
	void *data_addr,
	int  *data_type,
	int  *array_len,
	int  *string_len,
	int  column_len
	));

Proto (int, gdi_print_conn_,
       (
	int  *conn
	));

Proto (void, gdi_sleep_,
       (
	int  *conn,
	int  *max_sleep
	));

Proto (int, gdi_get_counter_,
       (
	int  *conn,
	char *table_name,
	char *ctr_name,
	int  *n_keys,
	int  *key_value,
	int  table_len,
	int  ctr_len
	));

Proto (void, gdi_trace_,
       (
	int  *conn,
	int  *mode,
	char *filename,
	int  lname
	));

Proto (int, gdi_submit_,
       (
	int  *conn,
	int  *map_id,
	char *cmd_batch,
	int  *max_records,
	int  *rows_retrieved,
	int  *rows_affected,
	int  *more_data,
	int  cmd_len
	));


