/* Copyright 1997, 1998, 1999 University Corporation for Atmospheric Research

	This software is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

	Author: Louis H. Estey <lou@unavco.ucar.edu>
	Date:   July 1999
		part of the BINEX source code release, see also:

	http://www.unavco.ucar.edu/software/binex
*/
#ifndef _GENERAL_H
#define _GENERAL_H

#if KR_C
/* K&R C function prototypes:
*/
extern unsigned long	read_ubnxi ();
extern unsigned long	ubnxi_to_uint4 ();
extern void		binex_f_stx ();
extern void		binex_append_time ();
extern void		binex_append_mGFZi ();
extern void		binex_append_mGFZI ();
extern double		binex_extract_mGFZi ();
extern double		binex_extract_mGFZI ();
extern void		append_uint1 ();
extern void		append_uint2 ();
extern void		append_sint2 ();
extern void		append_uint3 ();
extern void		append_uint4 ();
extern void		append_sint4 ();
extern void		append_real4 ();
extern void		append_real8 ();
extern void		extract_uint1 ();
extern void		extract_uint2 ();
extern void		extract_sint2 ();
extern void		extract_uint3 ();
extern void		extract_uint4 ();
extern void		extract_sint4 ();
extern void		extract_real4 ();
extern void		extract_real8 ();
extern unsigned char	binex_build_SV_id ();
extern bool		binex_extract_SV_id ();
extern unsigned long	uint4_to_ubnxi ();
extern void		binex_crc ();
extern void		reverse_bytes ();
extern void		swap_pp ();
extern void		swap_c ();
extern void		swap_uc ();
extern void		swap_i ();
extern void		swap_d ();

#else
/* ANSI C function prototypes:
*/
extern unsigned long	read_ubnxi (FILE_INFO *, unsigned char *, unsigned char *);
extern unsigned long	ubnxi_to_uint4 (unsigned char *, unsigned char);
extern void		binex_f_stx (FILE *);
extern void		binex_append_time (unsigned char *, unsigned long *, unsigned char);
extern void		binex_append_mGFZi (unsigned char *, unsigned long *, double, bool);
extern void		binex_append_mGFZI (unsigned char *, unsigned long *, double);
extern double		binex_extract_mGFZi (unsigned char *, unsigned long *, bool *, bool);
extern double		binex_extract_mGFZI (unsigned char *, unsigned long *, bool *);
extern void		append_uint1 (unsigned char *, unsigned long *, unsigned char);
extern void		append_uint2 (unsigned char *, unsigned long *, unsigned short);
extern void		append_sint2 (unsigned char *, unsigned long *, short);
extern void		append_uint3 (unsigned char *, unsigned long *, unsigned long);
extern void		append_uint4 (unsigned char *, unsigned long *, unsigned long);
extern void		append_sint4 (unsigned char *, unsigned long *, long);
extern void		append_real4 (unsigned char *, unsigned long *, float);
extern void		append_real8 (unsigned char *, unsigned long *, double);
extern void		extract_uint1 (unsigned char *, unsigned long *, unsigned char *);
extern void		extract_uint2 (unsigned char *, unsigned long *, unsigned short *);
extern void		extract_sint2 (unsigned char *, unsigned long *, short *);
extern void		extract_uint3 (unsigned char *, unsigned long *, unsigned long *);
extern void		extract_uint4 (unsigned char *, unsigned long *, unsigned long *);
extern void		extract_sint4 (unsigned char *, unsigned long *, long *);
extern void		extract_real4 (unsigned char *, unsigned long *, float *);
extern void		extract_real8 (unsigned char *, unsigned long *, double *);
extern unsigned char	binex_build_SV_id (SAT_ID *);
extern bool		binex_extract_SV_id (unsigned char, SAT_ID *);
extern unsigned long	uint4_to_ubnxi (unsigned char *, unsigned long *, unsigned long);
extern void		binex_crc (unsigned char *, unsigned char *, unsigned char *, unsigned long *, unsigned long, unsigned long, bool);
extern void		reverse_bytes (unsigned char *, int);
extern void		swap_pp (void **, void **);
extern void		swap_c (char *, char *);
extern void		swap_uc (unsigned char *, unsigned char *);
extern void		swap_i (int *, int *);
extern void		swap_d (double *, double *);
#endif

#endif
