#include "defs.h"

Prototype MemToDisk();


MemToDisk()
{
WORD n,bitmap;
LONG offset,*adrB,*empty,ddrive,A;
BYTE *BuffT,write,length,val;
WORD c,Form;
struct DiskList *dlist=0;
struct RootNode *RN;
struct RootB *adr;

	if (sourceDrive==destDrive) 
	{
		putIText("Now insert dest disk                ");
		if (WaitChangeDisk(destDrive,-1)==2) return(2);
		putIText("Thanck you                          ");
	}

	if (isInserted(destDrive)) 
	{
		putIText("YOU MUST insert DESTINATION disk ... ");
		while (isInserted(destDrive)) Delay(10);
	}
	if (isProtected(destDrive)) 
	{
		while (isProtected(destDrive))
		{
			putIText("UnProtect DESTINATION disk ...      ");
			while (!isInserted(destDrive)) Delay(10);
			while (isInserted(destDrive)) Delay(10);
		}
	}
	
	putIText("Writing result to destination disk  ");

	offset=2*512L;	/* Le boot Block est déja dans le Buffer de Track */
	BuffT=BT;
	/*	On met à jour la date de dernière modif de la disquette */
	dlist=whereB(880);
	if (dlist==0) NotSet(880,8);
	adr=dlist->dl_AdrB;
	RN=(struct RootNode *)(DOSBase->dl_Root);
	adr->Mday=RN->rn_Time.ds_Days;
	adr->Mmin=RN->rn_Time.ds_Minute;
	adr->Mtick=RN->rn_Time.ds_Tick;

	length=adr->DiskName[0];
	adr->DiskName[0]=length+1;
	if (length<30) adr->DiskName[length+1]='.';
	else {adr->DiskName[length]='.'; adr->DiskName[0]=length;}

	bitmap=VarAdr->BitMap;
	empty=VarAdr->Empty;
	ddrive=destDrive;
	A=('F'<<24|'B'<<16|'J'<<8|'.');

	for (n=0;n<128;n++)
	{
		empty[n]=A;
	}

	/*printf("buffer a l' adresse %p\n",empty);*/
	putchar(13);

	Form=FORMAT;
	/*printf("Form : %d, VarAdr->Format: %ld\n",Form,VarAdr->Format);*/
	write=Form;
	for (n=2;n<1761;n++)
	{
		val=HandleIDCMP2(FOWin);
		if (val)
		{
			if (val==1) exit(0);
			if (val==2) return(2);
		}
		if (offset==11*512) 
		{
			/*printf("(n-12): %d\n",(n-11));	*/
			if (write)	CMDonD(ddrive,TD_FORMAT,0,11*512L,BuffT,(n-11)*512L);
			offset=0L;
			if (!Form) write=0;
		}
		if (( n % 22 )==0) printCYL(n/22);
		if (n==881) {adrB=BBM; write=1;}
		else 
		{
			dlist=whereB(n);
			if (dlist==0) adrB=empty;
			else 
			{
				adrB=dlist->dl_AdrB;
				if (FFS==0 || dlist->dl_Type!=8) BuildCheckSum(adrB);
				write=1;
			}
		}	
		CopyMemQuick(adrB,BuffT+offset,512L);
		offset+=512L;
	}
	return(0);
} 
