// cursor.cpp
#include <dos.h>
#include "cursor.h"
#include "video.h"
namespace Cursor
{
int state = init();
int init()
{
// Start with a line cursor
line();
return LINE;
}
void set(unsigned start, unsigned stop)
{
union REGS r;
r.h.ah = 1;
r.h.ch = (unsigned char) start;
r.h.cl = (unsigned char) stop;
int86(0x10,&r,&r);
}
void block()
{
switch(Video::type())
{
case Video::COLOR:
set(2,7);
break;
case Video::MONO:
set(2,13);
break;
}
state = BLOCK;
}
void line()
{
switch(Video::type())
{
case Video::COLOR:
set(6,7);
break;
case Video::MONO:
set(12,13);
break;
}
state = LINE;
}
void flip()
{
state = !state;
switch(state)
{
case LINE:
line();
break;
case BLOCK:
block();
break;
}
}
void off()
{
set(15,0);
}
void setpos(int row, int col)
{
union REGS r;
r.x.ax = 0x0200;
r.x.bx = 0;
r.h.dh = (unsigned char) row;
r.h.dl = (unsigned char) col;
int86(0x10,&r,&r);
}
void getpos(int& row, int& col)
{
union REGS r;
r.x.ax = 0x0300;
r.x.bx = 0;
int86(0x10,&r,&r);
row = r.h.dh;
col = r.h.dl;
}
}
// End of File