/*
 *      Include file for FlowConv
 *
 * $Header: $
 *
 * $Log: $
 *
 */

#include <dos/dos.h>

/* file formats */
#define FMT_NONE        0       /* illegal value used for error checking */
#define FMT_XFERQ       1       /* xferq.library */
#define FMT_FLO         2       /* 2D .FLO */
#define FMT_OMMM        3       /* 3D outbound.zzz/.FLO */
#define FMT_TRAPDOOR    4       /* 4D z.n.f.p.FLO */



struct FidoAddr {
  long zone;
  long net;
  long fido;
  long point;
};


struct PointNet {
  struct PointNet *next;
  struct FidoAddr addr;		/* pointnet in addr.point */
};


struct ZoneDir {
  struct ZoneDir *next;
  short zone;
  BPTR lock;
};


#define E_OK		0	/* no error */
#define E_BADCMD	1	/* bad command name */
#define E_BADARG	2	/* bad command argument */
#define E_NOMEM		3	/* can't allocate required memory */
#define E_DOS		4	/* DOS filesystem error */
#define E_NOFLOW	5	/* can't open flow.library */
#define E_NOOUTBOUND	6	/* cannot determine outbound directory */

#define MAXARGS		4

char *ReadFile(BPTR lock, char *name, long *len);
int decodeFido(char *str, struct FidoAddr *addr);
int decodeFmt(char *str);
char *NextWord(char *p);
char *NextLine(char *p);
int ParseCommandLine(char *line);
int DoCommand(void);

int DoFlowOutbound(void);
int DoFlatOutbound(void);
int DoHost(void);
int DoPri(void);
int DoZoneDir(void);
int DoPointNet(void);
int DoDefZone(void);
int DoConsult(void);

char *FullPath(BPTR lock, char *name);
char *BaseName(char *name);
int IsHut(char *name, struct FidoAddr *addr);
void RemoveHuts(void);
int AddHuts(BPTR lock);
void FromPointNet(struct FidoAddr *from, struct FidoAddr *to);
void ToPointNet(struct FidoAddr *from, struct FidoAddr *to);
void GetFlatName(short format, BPTR *lock, char *buf, struct FidoAddr *addr);
int ReadFlatFile(BPTR lock, char *name, char pri);
int ReadFlat(short format);
int WriteFlat(short format);
int OpenXferq(void);
int WriteXferq(void);
void DropFileList(void);
int DoConvert(void);
