#include <stdio.h>
#include <string.h>

#include "general.h"

#ifdef TRS80
#define BITVIDEO 3

static u_char EtPortff = 0;

#define REPOS 0
#define PLAY 1
#define RECORD 2

FILE *k7file[2]= { NULL, NULL };

static u_char k7mode[2]= { REPOS, REPOS };
static u_char k7offset[2]= { 0, 0 };

static u_char icurk7 = 0;

void SelK7(u_char vx)
{
icurk7 = vx & 1;
}

u_char Rdk7bit(u_char v)
{
static u_char vx[1] = { 0 };
BOOL fb;
if(!k7file[icurk7] || k7mode[icurk7]!= PLAY) return(0);
if(!k7offset[icurk7]) fread(vx,1,1,k7file[icurk7]);
fb= ((vx[0] & 128)!= 0);
vx[0]<<=1;
k7offset[icurk7]= (k7offset[icurk7] == 7) ? 0 : (k7offset[icurk7]+1);
return((v<<1) | (fb ? 1 : 0));
}

void Wrk7byte(u_char v)
{
if(k7file[icurk7]!= NULL && k7mode[icurk7] == RECORD)
	{
	u_char vx[1];
	vx[0]= v;
	fwrite(vx,1,1,k7file[icurk7]);
	}
}


void Traitk7(char *s)
{
u_char ik= *(s+1);
u_char ik7= ((ik == '2') ? 1 : 0);
if(!*s) return;
switch(*s)
	{
	char *p;
	char filename[32];
	case '0':
	case '1':
	case '2':
		k7mode[ik7]= (*s) - '0';
		break;
	case 'A':
	case 'a':
		if(k7file[ik7])
			{
			fseek(k7file[ik7],0L,SEEK_END);
			k7mode[ik7]= RECORD;
			k7offset[ik7]= 0;
			}
		break;
	case 'R':
	case 'r':
		if(k7file[ik7])
			{
			rewind(k7file[ik7]);
			k7offset[ik7]= 0;
			k7mode[ik7]= PLAY;
			}
		break;
	case 'F':
	case 'f':
		if(k7file[ik7])
			{
			fclose(k7file[ik7]);
			k7file[ik7]= NULL;
			}
		if(!strchr(p= (ik == '1' || ik == '2' ? s+2 : s+1),':'))
			strcpy(filename,"<Trash80$Dir>.");
		else	filename[0]= 0;
		k7file[ik7]= fopen(strcat(filename, p), "r+b"); 
		break;
	}
}

u_char EmuReadPort(T_NO_PORT port)
{
u_char vx= 0;
if(EtPortff & (1<<BITVIDEO))
	vx|= 1<<6;
return(vx);
}

void EmuWritePort(T_NO_PORT port, u_char vx)
{
if(port == 0xff)
	{
	extern void SRd32vidTrue(void), SRd32vidFalse(void);
	u_char v1= vx & (1<<BITVIDEO); 
	if((EtPortff & (1<<BITVIDEO)) ^ v1)
		v1 ? SRd32vidTrue() : SRd32vidFalse();
	EtPortff= vx;
	}
}
#endif
