/* MUI */
#include <libraries/mui.h>

/* System */
#include <dos/dos.h>
#include <graphics/gfxmacros.h>
#include <workbench/workbench.h>

/* Prototypes */
#include <clib/alib_protos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/icon_protos.h>
#include <clib/graphics_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/utility_protos.h>
#include <clib/asl_protos.h>
#include <clib/muimaster_protos.h>

/* ANSI C */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define REG(x) register __ ## x

#ifdef __MAXON__
#define ASM
#define SAVEDS
#else
#define ASM    __asm
#define SAVEDS __saveds
#endif

#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>
#include <pragmas/icon_pragmas.h>
#include <pragmas/graphics_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
#include <pragmas/utility_pragmas.h>
#include <pragmas/asl_pragmas.h>
#include <pragmas/muimaster_pragmas.h>

extern struct Library *SysBase,*IntuitionBase,*UtilityBase,*GfxBase,*DOSBase,*IconBase;

#ifndef MAKE_ID
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
#endif

#include <exec/memory.h>
#include <float.h>
#include <math.h>
#include <stat.h>
#include <fcntl.h>
#include <dos.h>

#define FLAG_README 1<<1
#define HAS_README(entry) (entry->flags & FLAG_README)

#define ID_Sort 	1
#define ID_View 	2
#define ID_Readme	3
#define ID_Name 	4
#define ID_Get		5
#define ID_AddHost	6
//#define ID_Quit	  7
//#define ID_FilesDC	  8
#define ID_ReadNext	9
#define ID_GetAbort	10
#define ID_HostsConnect 11
#define ID_Config	12

struct FileLineRec {
    char *dir, *name, *size, *readme, *descr;
    LONG time, intsize, flags, recsize;
};

struct HostLineRec {
    char country[30], host[30], dir[30];
};

struct HostRec {
    char country[30], host[30], dir[30];
    APTR next;
};

struct PrefsRec {
    int defsort, defview;
    char getdir[256], tmpdir[256], defcfg[256], server[256], uncomp[256];
    LONG lasttime, thistime;
};

void adt_status(char *);
int read_prefs(void);
int write_prefs(char *);
void show_new(void);
void show_recent(void);
void show_tagged(void);
void show_short(void);
void clone_tagged(APTR);
void copy_tagged(APTR);
void copy_all(APTR);
char *gettok(char **, char, int *);
int get_parse(char *, APTR);
int adt_parse_v1(FILE *, APTR);
void readme(char *, char *);
int get_file(char *, char *, int);
APTR currentlv(void);

extern char *ftp_connect(char *, char *);
extern int ftp_get(char *, LONG, char *);
extern void joinpaths(char *, char *, char *);

static const char *DefHostList[] = {
    "SCANDINAVIA:ftp.luth.se:pub/aminet/",
    "SWITZERLAND:litamiga.epfl.ch:pub/aminet/",
    "GERMANY:ftp.uni-kl.de:pub/aminet/",
    "GERMANY:ftp.cs.tu-berlin.de:pub/aminet/",
    "GERMANY:ftp.uni-erlangen.de:pub/aminet/",
    "GERMANY:ftp.uni-paderborn.de:pub/aminet/",
    "USA:wcarchive.cdrom.com:pub/aminet/",
    "USA:ftp.etsu.edu:pub/aminet/",
    "USA:wuarchive.wustl.edu:pub/aminet/",
    "UK:src.doc.ic.ac.uk:pub/aminet/",
    "AUSTRALIA:splat.aarnet.edu.au:pub/aminet/",
    NULL
};

