/* scon.h */
#include <stdlib.h>
#include <stdio.h>

#ifdef WIN32
#include <winsock2.h>
#include <direct.h>
#include <io.h>
#define EINTR WSAEINTR

int key_getvalue(HKEY htopkey, char *keypath, char *keyname, unsigned char *Buf, int nb);
int key_setint(HKEY htopkey, char *keypath, char *keyname, DWORD dw);
int key_setstring(HKEY htopkey, char *keypath, char *keyname, char *stg);

#else

#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define INVALID_SOCKET -1
#define MAX_PATH 256

#define WSAStartup(a,b) 0
#define WSACleanup(a) 0
#define closesocket close
#define _fileno fileno
#define _isatty isatty
#define _getcwd getcwd
#define Sleep sleep
typedef int SOCKET;
typedef int WSADATA;

unsigned int GetTickCount(void);
#endif

extern SOCKET socCtrl;

extern char curdir[MAX_PATH];
extern char locdir[MAX_PATH];

extern char server[MAX_PATH];	// server\tuser\tpassword
extern char resumecmd[2*MAX_PATH+128];
extern char reply[512];

extern int bprompt;
extern int bpasv;
extern int globbing;
extern int verbose;
extern int ascii;
extern int btty;
extern int bSendPort;
extern int bdebug;
extern int aborted;

#define erreport(m) errormsg(m, __FILE__, __LINE__)

/* mftp.c */
int getraw(char *buf, int nb);
int send_command_fp(char *msgfmt, char *arg, FILE *fp);
int send_command(char *, char *);
int ftpok(void);
int chomp(char *word, int nw, char *src);
void trim(char *s);
int query(char *pr, char *arg);
void resignal(void);

/* scon.c */
SOCKET ConnectToServer(char *name, unsigned short port);
SOCKET DataConnect(void);
SOCKET AcceptConnection(SOCKET);
int SendMsg(SOCKET sockfd, char *buff, int len);
void SocClose(SOCKET *s);
int GetLine(SOCKET s, char *buff, int len, char *keep, int *pkn);
int GetReply(char *buff, int nb, FILE *fo);
void flush_control_socket(FILE *fo);

/* ftpdata.c */
int getfile(char *filename, char *destname, int nrestore);
void mget(char *pathnames, int bdelete);
int putfile(char *cmd, char *filename, char *destname, int nrestore);
void mput(char *paths);
void lister(char *command, char *arg, int moring);

/* sockerr.c */
char *sockerr(int errn);

/* system-dependant */
void setremotefiledate(char *filename, char *fname);
void setlocalfiledate(char *fname, char *ymdhms);
char *localfilelist(char *apath);
int getraw(char *buf, int nb);
int lasterror(void);
int errormsg(char *msg, char *file, int lineno);

