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

#define CONX 20
#define CONY 12

static char buf[CONY][CONX+1];
char __conx,__cony;

void _INIT_2_stdio(void)
{
  Wait_Recal();
  Intensity_a(0x7f);

  memset(buf,' ',sizeof(buf));
  buf[0][CONX]=0x80;
  buf[1][CONX]=0x80;
  buf[2][CONX]=0x80;
  buf[3][CONX]=0x80;
  buf[4][CONX]=0x80;
  buf[5][CONX]=0x80;
  buf[6][CONX]=0x80;
  buf[7][CONX]=0x80;
  buf[8][CONX]=0x80;
  buf[9][CONX]=0x80;
  buf[10][CONX]=0x80;
  buf[11][CONX]=0x80;
}

void __conrefresh()
{
  Wait_Recal();
  Print_Str_d(__D(-120,120),buf[0]);
  Print_Str_d(__D(-120,100),buf[1]);
  Print_Str_d(__D(-120, 80),buf[2]);
  Print_Str_d(__D(-120, 60),buf[3]);
  Print_Str_d(__D(-120, 40),buf[4]);
  Print_Str_d(__D(-120, 20),buf[5]);
  Print_Str_d(__D(-120,  0),buf[6]);
  Print_Str_d(__D(-120,-20),buf[7]);
  Print_Str_d(__D(-120,-40),buf[8]);
  Print_Str_d(__D(-120,-60),buf[9]);
  Print_Str_d(__D(-120,-80),buf[10]);
  Print_Str_d(__D(-120,-100),buf[11]);
}

void _EXIT_2_stdio(void)
{
 while(1) __conrefresh();
}

void __cr()
{
  __conx=0;
  if(__cony==CONY-1){
   memcpy(buf[0],buf[1],(CONX+1)*(CONY-1));
   memset(buf[CONY-1],' ',CONX);
  }else
    __cony++;
}

void __sputc(char c)
{
 if(c=='\r'){ __conx=0; return;}
 if(c=='\n'){ __cr(); return;}
 buf[__cony][__conx]=toupper(c);
 __conx++;
 if(__conx>=CONX) __cr();
}

int __write(int h,const char *p,size_t l)
{
  size_t n=l;
  while(n){
   __sputc(*p++);
   n--;
  }
  __conrefresh();
  return l;
}
