/*

dmove86.h Version 2.00c
Copyright (c) 1993,94 Delmonta

*/

#pragma recursive
#pragma	optimize space

struct	SECTBL
{
	unsigned long		num;
	struct DIRENTRY far	*buf;
	struct SECTBL		*next;
};

struct DPB
{
	unsigned char	drive;
	unsigned char	unitno;
	unsigned int	seclen;
	unsigned char	sec_clu;
	unsigned char	shiftcount;
	unsigned int	iplsectors;
	unsigned char	fatnum;
	unsigned int	root_entry;
	unsigned int	data_sec;
	unsigned int	maxclu;

};

struct	DIRENTRY
{
	char		filename[8];
	char		extname[3];
	char		attr;
	
	char		dummy[10];

	unsigned int	time;
	unsigned int	date;

	unsigned int	cluster;
	unsigned long	filesize;
};

#ifdef	LSI_C
	#define	huge	far
#endif

#ifdef	MAIN
	#define	GLOVAL /* */
#else
	#define	GLOVAL	extern
#endif

GLOVAL	int			Drive;
GLOVAL	struct	DPB		Dpb;
GLOVAL	unsigned		Fatsize;
GLOVAL	unsigned short huge	*Fat;
GLOVAL	struct DIRENTRY	far	**Dirtbl;
GLOVAL	unsigned		Dirnum;

/* fat_dpb.c */
int		getdpb(void);
unsigned short huge *getfat(void);

/* dmove86.c */
int		main(int argc,char *argv[]);
void		endscreen(void);

/* console.c */

char		dm_errmes(char *s);
void		mkscreen(void);
char		dm_getch(void);
void		dm_ungetch(char c);
int		strinput(char *buf,unsigned len);

/* sectbl.c */
struct DIRENTRY far **readentry(struct DIRENTRY far *parent,
					struct SECTBL **sectbl,int *dirnum);
void		freesectbl(struct SECTBL *sectbl);
void		writedir(struct SECTBL *sectbl, struct DIRENTRY far **dirtbl);

/* dmsort.c */
int		dmsort(unsigned start,unsigned end);

/* dmrename.c */
int		dmrename(unsigned no);

/* abssec2.a86 */
unsigned	readabssec (void far *,unsigned long,unsigned,int);
unsigned	writeabssec(void far *,unsigned long,unsigned,int);

#define	CL2SEC(c)	( Dpb.data_sec + ((long)(c)-2)*(Dpb.sec_clu+1) )
#define	DIRSEC		(Dpb.seclen / sizeof(struct DIRENTRY))

				/* カーソルキーの仮想文字コード */
#define	RIGHTKEY	'\x1c'
#define	LEFTKEY		'\x08'
#define	UPKEY		'\x1e'
#define	DOWNKEY		'\x1f'
