/* @@@HEAD@@@
// Declarations for utility functions.
*/

#ifndef UTIL_H
#define UTIL_H

#define NUMBER_BUF_SIZE 32
typedef char Number_buf[NUMBER_BUF_SIZE];

#include <stdio.h>
#include <stdarg.h>
#include "cdc_types.h"

#define LCASE(c) lowercase[(int) c]
#define UCASE(c) uppercase[(int) c]

void init_util(void);
unsigned long hash(char *s);
unsigned long hash_case(char *s, int n);
long atoln(char *s, int n);
char *long_to_ascii(long num, Number_buf nbuf);
char *float_to_ascii(float num, Number_buf nbuf);
int strccmp(char *s1, char *s2);
int strnccmp(char *s1, char *s2, int n);
char *strcchr(char *s, int c);
char *strcstr(char *s, char *search);
long random_number(long n);
char *crypt_string(char *key, char *salt);
string_t *vformat(char *fmt, va_list arg);
string_t *format(char *fmt, ...);
char * timestamp(char * str);
void fformat(FILE *fp, char *fmt, ...);
string_t *fgetstring(FILE *fp);
char *english_type(int type);
char *english_integer(int n, Number_buf nbuf);
long parse_ident(char **sptr);
FILE *open_scratch_file(char *name, char *type);
void close_scratch_file(FILE *fp);
void init_scratch_file(void);
int parse_strcpy(char * s1, char * s2, int len);


extern char lowercase[128];
extern char uppercase[128];

#endif